c# - 字符串或二进制数据将在 cmd.ExecuteNonQuery() 上被截断

标签 c# sql-server

我在执行项目时遇到错误。我在这个按钮中有两个命令。有人可以帮我弄这个吗?我无法检测到问题所在。之前一直都好好的,但是现在就出现了问题。我正在开发一个图书馆系统

SqlCommand cmd = con.CreateCommand();
cmd.CommandText = "INSERT INTO Borrowbook ([Student ID], ISBN, Title, Date, [Due Date]) VALUES (@StudentID, @ISBN, @Title, @Date, @DueDate)";
Control[] controls = { textBox2, textBox3, textBox4 };

foreach (Control c in controls)
{
   if (c.Text.Trim() == "")
   {
      MessageBox.Show("Please complete the fields", "Information...",
                      MessageBoxButtons.OK, MessageBoxIcon.Warning,
                      MessageBoxDefaultButton.Button1);
      return;
   }
}

SqlParameter p1 = new SqlParameter("@StudentID", SqlDbType.NChar);
p1.Value = textBox2.Text;
cmd.Parameters.Add(p1);

SqlParameter p2 = new SqlParameter("@ISBN", SqlDbType.NVarChar);
p2.Value = textBox4.Text;
cmd.Parameters.Add(p2);

SqlParameter p3 = new SqlParameter("@Title", SqlDbType.VarChar);
p3.Value = textBox3.Text;
cmd.Parameters.Add(p3);

SqlParameter p4 = new SqlParameter("@Date", SqlDbType.DateTime);
p4.Value = dateTimePicker1.Text;
cmd.Parameters.Add(p4);

SqlParameter p5 = new SqlParameter("@DueDate", SqlDbType.DateTime);
p5.Value = duedate.Text;
cmd.Parameters.Add(p5);

cmd.ExecuteNonQuery();

cmd.CommandText = ("UPDATE Books SET Availability = 'Borrowed' WHERE ISBN = '" + textBox4.Text + "'");
cmd.ExecuteNonQuery();

cmd.CommandText = ("INSERT INTO Penalty([Student ID], Title, [Date Borrow], [Due Date]) VALUES  (@StudentID1, @Title1, @Date1, @Date2)");

SqlParameter pp1 = new SqlParameter("@StudentID1", SqlDbType.VarChar);
pp1.Value=textBox2.Text;
cmd.Parameters.Add(pp1);

SqlParameter pp3 = new SqlParameter("@Title1", SqlDbType.NVarChar);
pp3.Value = textBox3.Text;
cmd.Parameters.Add(pp3);

SqlParameter pp4 = new SqlParameter("@Date1", SqlDbType.DateTime);
pp4.Value = dateTimePicker1.Text;
cmd.Parameters.Add(pp4);

SqlParameter pp5 = new SqlParameter("@Date2",SqlDbType.DateTime);
pp5.Value=duedate.Text;
cmd.Parameters.Add(pp5);

cmd.ExecuteNonQuery();
MessageBox.Show("The books has been successfully borrowed!", "Information ... ", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);

最佳答案

首先:这个错误到底发生在哪里?您的代码中有多个命令 - 哪一个导致错误?

第二:错误很明显:您尝试存储的至少一个值太长。因此,您的数据库中可能定义了 Varchar(20),并且您尝试存储长度为 25 个字符的字符串。

发现这个问题,解决它。要么使数据库列更长(例如,将其长度增加到 25 个字符),要么缩短要插入该列的字符串以遵守定义的最大长度。

不幸的是,SQL Server 并不能真正帮助您找出哪个参数出了问题 - 您必须自己进行调试并查看哪些参数太长。

关于c# - 字符串或二进制数据将在 cmd.ExecuteNonQuery() 上被截断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18799785/

相关文章:

C# sql 创建一个连接并为每个查询打开和关闭

sql-server - SQL Server 阿拉伯语问号

sql-server - 如何查询 SQL Server 备份文件

sql-server - 维护计划执行选项呈灰色

c# - 如何在 c# 中的 xamarin android 中识别 android 移动设备 uniqueid

c# - Winforms 中的键盘事件传播

c# - LINQ to Objects 中的 Like 运算符

sql - 在 FULL OUTER JOIN 中选择非空列

c# - 在 C# 中允许反斜杠的正则表达式

c# - 如何为每个线程设置时区?