字符串或二进制数据将被截断。

杰森kwp

新成员
已加入
2019年6月16日
留言内容
4
编程经验
Beginner
嗨,我是ASP.NET C#的新手,我正在尝试编写一个简单的清单系统,但是当我调试错误福彩12选5走势图时收到以下错误。

System.Data.SqlClient.SqlException:'字符串或二进制数据将被截断。
该语句已终止。'


请注意,我确实知道错误的含义,但是我已经检查了SQL数据库表的设计,并且将每个字段的字符长度设置得足够高,以适应要输入的文本。请参见下面的屏幕快照中的数据库表设计
546


这是我的C#福彩12选5走势图:

C#:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Configuration;
using System.Security.Cryptography;

namespace InformationTechnologyInventoryStock
{
    public partial class Workstations : Form
    {
        private int n;

        public Workstations()
        {
            InitializeComponent();
        }

        private void Workstations_Load(object sender, EventArgs e)

        {
            using (SqlConnection con = new SqlConnection())
            {
                con.ConnectionString = (@"Data Source=SH-JASONK\DEV;Initial Catalog=StockInventory;Integrated Security=True");
                con.Open();
                bool status = false;
                if (combostatus.SelectedIndex == 0)
                {
                    status = true;
                }
                else
                {
                    status = false;
                }
                using (SqlCommand cmd = con.CreateCommand())
                {
                    cmd.CommandText =
                    cmd.CommandText = (@"INSERT INTO [StockInventory].[dbo].[Workstations](Emp_Name,
Emp_Surname, Department, Company,
Hostname, Wkst_Status, Make, Model, SerialNumber,
ProductNumber, PurchaseDate, ExpiryDate, Memory,
Processor, HDD, OS, MSOffice) VALUES ('" + txtname.Text + "','" + txtsurname.Text + "','" + combodept.Text + "','" + combocompany.Text + "','" + txthostname.Text + "','" + combostatus.Text + "','" + combomake.Text + "','" + txtmodel.Text + "','" + textsn.Text + "','" + txtprodnum.Text + "','" + dateTimePicker1.Value.ToString("yyyy/MM/dd") + "','" + dateTimePicker2.Value.ToString("yyyy/MM/dd") + "','" + combomem + "','" + txtproc + "','" + combohdd + "','" + comboOS + "','" + combooffice + "')");
                    cmd.ExecuteNonQuery();
                    con.Close();

                    //Reading Data:

                    SqlDataAdapter sda = new SqlDataAdapter("SELECT * FROM [StockInventory].[dbo].[Workstations] ", con);
                    DataTable dt = new DataTable();
                    sda.Fill(dt);
                    dataGridView1.Rows.Clear();
                    foreach (DataRow item in dt.Rows)
                    {
                        int n = dataGridView1.Rows.Add();
                        dataGridView1.Rows[n].Cells[0].Value = item["Emp_Name"].ToString();
                        dataGridView1.Rows[n].Cells[1].Value = item["Emp_Surname"].ToString();
                        dataGridView1.Rows[n].Cells[2].Value = item["Department"].ToString();
                        dataGridView1.Rows[n].Cells[3].Value = item["Company"].ToString();
                        dataGridView1.Rows[n].Cells[4].Value = item["Hostname"].ToString();
                        if ((bool)item["Wkst_Status"])
                            if (combostatus.SelectedIndex == 0)
                            {
                                dataGridView1.Rows[n].Cells[5].Value = "ACTIVE";
                            }
                            else
                            {
                                dataGridView1.Rows[n].Cells[5].Value = "INACTIVE";
                            }

                        dataGridView1.Rows[n].Cells[5].Value = item["Make"].ToString();
                        dataGridView1.Rows[n].Cells[6].Value = item["Model"].ToString();
                        dataGridView1.Rows[n].Cells[7].Value = item["SerialNumber"].ToString();
                        dataGridView1.Rows[n].Cells[8].Value = item["ProductNumber"].ToString();
                        dataGridView1.Rows[n].Cells[9].Value = item["PurchaseDate"].ToString();
                        dataGridView1.Rows[n].Cells[10].Value = item["ExpiryDate"].ToString();
                        dataGridView1.Rows[n].Cells[11].Value = item["Memory"].ToString();
                        dataGridView1.Rows[n].Cells[12].Value = item["Processor"].ToString();
                        dataGridView1.Rows[n].Cells[13].Value = item["HDD"].ToString();
                        dataGridView1.Rows[n].Cells[14].Value = item["OS"].ToString();
                        dataGridView1.Rows[n].Cells[15].Value = item["MSOffice"].ToString();
                    }

                    MessageBox.Show("INSERTED SUCCESSFULLY");
                }
            }
        }
    }
}

你能告诉我我在做什么错或在哪里寻找问题

先感谢您

杰森
 
由主持人最后编辑:

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,926
地点
英国
编程经验
10+
您能编辑帖子并使用福彩12选5走势图标签插入按钮吗?这将使您像在IDE中一样进行格式化,使我们更容易阅读。
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,520
地点
弗吉尼亚州切萨皮克
编程经验
10+
注意报价。将其放在福彩12选5走势图标签中。

无论如何,
C#:
cmd.CommandText = (@"INSERT INTO [StockInventory].[dbo].[Workstations](Emp_Name,
Emp_Surname, Department, Company,
Hostname, Wkst_Status, Make, Model, SerialNumber,
ProductNumber, PurchaseDate, ExpiryDate, Memory,
Processor, HDD, OS, MSOffice) VALUES ('" + txtname.Text + "','" + txtsurname.Text + "','" + combodept.Text + "','" + combocompany.Text + "','" + txthostname.Text + "','" + combostatus.Text + "','" + combomake.Text + "','" + txtmodel.Text + "','" + textsn.Text + "','" + txtprodnum.Text + "','" + dateTimePicker1.Value.ToString("yyyy/MM/dd") + "','" + dateTimePicker2.Value.ToString("yyyy/MM/dd") + "','" + combomem + "','" + txtproc + "','" + combohdd + "','" + comboOS + "','" + combooffice + "')");
这是开放自己进行SQL注入攻击的好方法。

看到:
exploits_of_a_mom.png
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,519
地点
悉尼,澳大利亚
编程经验
10+
您要我引用整个福彩12选5走势图吗
您在其中发布了福彩12选5走势图的编辑器有一个工具栏。我确定您以前使用过这种东西。请探索它,看看它能做什么。这次我为您做了。请确保您也始终在福彩12选5走势图段中包含原始缩进。我必须将您的福彩12选5走势图复制并粘贴到VS中才能恢复缩进。那是使福彩12选5走势图可读的最重要的事情,但是语法高亮也有帮助。

另外,不要仅仅复制并粘贴您拥有的每一行福彩12选5走势图,并希望我们进行深入的查找以找到相关的部分。您有责任专注于相关部分,并仅发布相关内容。例如,您是否将该错误消息复制到搜索引擎中以查找有关该消息的信息?从中找到原因的解释将是相当容易的。即使那不能使您最终解决,也意味着您只能向我们提供与问题相关的信息和福彩12选5走势图。

Basically, the error message is telling you that you're trying to save a value that is longer than the max size specified in the database, e.g. trying to save 51 characters to a column declared as type varchar(50). It's up to you to validate data before trying to save it and max lengths are one of the things you need to check, especially if your UI doesn't enforce such things.

另外,如建议的那样,您确实需要学习如何使用参数。就目前而言,恶意用户可能会删除数据库中的所有内容,并有可能使数据库本身发生事件。尝试这个:

 

杰森kwp

新成员
已加入
2019年6月16日
留言内容
4
编程经验
Beginner
您在其中发布了福彩12选5走势图的编辑器有一个工具栏。我确定您以前使用过这种东西。请探索它,看看它能做什么。这次我为您做了。请确保您也始终在福彩12选5走势图段中包含原始缩进。我必须将您的福彩12选5走势图复制并粘贴到VS中才能恢复缩进。那是使福彩12选5走势图可读的最重要的事情,但是语法高亮也有帮助。

另外,不要仅仅复制并粘贴您拥有的每一行福彩12选5走势图,并希望我们进行深入的查找以找到相关的部分。您有责任专注于相关部分,并仅发布相关内容。例如,您是否将该错误消息复制到搜索引擎中以查找有关该消息的信息?从中找到原因的解释将是相当容易的。即使那不能使您最终解决,也意味着您只能向我们提供与问题相关的信息和福彩12选5走势图。

Basically, the error message is telling you that you're trying to save a value that is longer than the max size specified in the database, e.g. trying to save 51 characters to a column declared as type varchar(50). It's up to you to validate data before trying to save it and max lengths are one of the things you need to check, especially if your UI doesn't enforce such things.

另外,如建议的那样,您确实需要学习如何使用参数。就目前而言,恶意用户可能会删除数据库中的所有内容,并有可能使数据库本身发生事件。尝试这个:

我已经搜索了错误和可能的解决方案,我还检查了数据库表和用户界面的最大长度
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,519
地点
悉尼,澳大利亚
编程经验
10+
我还检查了数据库表和用户界面的最大长度
然后再次检查,因为您错过了一些东西。这是您看到该错误消息的唯一原因。您是在查看SQL福彩12选5走势图中使用的实际值还是您认为正在使用的值?我注意到最后五个值看起来像您正在使用实际控件作为值:
C#:
+ "','" + combomem + "','" + txtproc + "','" + combohdd + "','" + comboOS + "','" + combooffice + "')");
whereas earlier in that line you are using the Text properties of the controls:
C#:
+ "','" + txtsurname.Text + "','" + combodept.Text + "','" + combocompany.Text + "','" + txthostname.Text
If that's the problem then you should have seen that for yourself because you should have already looked at the actual value of cmd.CommandText rather than just the code that constructs it. ALWAYS look at the actual values being used by the code, not just the code that uses them. This is why you MUST use the debugger and watch your code as it executes and not just read it in the code editor.
 

杰森kwp

新成员
已加入
2019年6月16日
留言内容
4
编程经验
Beginner
然后再次检查,因为您错过了一些东西。这是您看到该错误消息的唯一原因。您是在查看SQL福彩12选5走势图中使用的实际值还是您认为正在使用的值?我注意到最后五个值看起来像您正在使用实际控件作为值:
C#:
+ "','" + combomem + "','" + txtproc + "','" + combohdd + "','" + comboOS + "','" + combooffice + "')");
whereas earlier in that line you are using the Text properties of the controls:
C#:
+ "','" + txtsurname.Text + "','" + combodept.Text + "','" + combocompany.Text + "','" + txthostname.Text
If that's the problem then you should have seen that for yourself because you should have already looked at the actual value of cmd.CommandText rather than just the code that constructs it. ALWAYS look at the actual values being used by the code, not just the code that uses them. This is why you MUST use the debugger and watch your code as it executes and not just read it in the code editor.
非常感谢,
金西尼
不知道我是怎么想念的,我只是想看看福彩12选5走势图,脑子这么旋转,我在没有它的后面加上了.Text,然后运行了调试器,它就起作用了。
 
最佳 底部