像我在尝试通过UI更新DataGridView时遇到的任何其他问题一样。这是我得到的错误:
SQLException未处理。字符串或二进制数据将被截断。声明已经终止。
现在这是我要更新的列列表:
ShipTrackingNumber(nvarchar(100),null)
ShipMethodTransmitted(nvarchar(50),null)
DateShipTransmitProcessed(datetime,null)
ShipmentProcessedBy(nvarchar(50),null)
严重(nchar(1),null)
ShipTransmitStatus(nvarchar(50),null)
现在您已获得列列表及其属性。以下是更新这些列的代码:
public void SaveDataSet(DataTable table)
{
foreach (DataRow row in table.Rows)
{
SqlCommand cmd2 = new SqlCommand(
"update dbo.JobStatus SET ShipTrackingNumber = '@trackingNumber', ShipMethodTransmitted = '@TransmitMethod', DateShipTransmitProcessed = @DateProcessed, ShipmentProcessedBy = '@ProcessedBy', Critical = '@Critical', ShipTransmitStatus = '@TransmitStatus' WHERE JobTableId = @JobTableId ", _mySqlConnec);
//Updated the parameters to the SQL Query!
cmd2.Parameters.Add(new SqlParameter("@trackingNumber", row["Tracking#"].ToString()));
cmd2.Parameters.Add(new SqlParameter("@TransmitMethod", row["TransmitMethod"].ToString()));
cmd2.Parameters.Add(new SqlParameter("@DateProcessed", row["DateProcessed"]));
cmd2.Parameters.Add(new SqlParameter("@ProcessedBy", row["ProcesssedBy"].ToString()));
cmd2.Parameters.Add(new SqlParameter("@Critical", row["Critical"].ToString()));
cmd2.Parameters.Add(new SqlParameter("@TransmitStatus", row["Status"].ToString()));
cmd2.Parameters.Add(new SqlParameter("@JobTableId", row["JobID"].ToString()));
cmd2.Connection = _mySqlConnec;
_mySqlConnec.Open();
cmd2.ExecuteNonQuery();
_mySqlConnec.Close();
}
}
}
任何人都可以在这方面帮助我。谢谢!
答案 0 :(得分:4)
您不需要在任何参数周围加上引号。
将您的sql更改为:
update dbo.JobStatus SET ShipTrackingNumber = @trackingNumber,
ShipMethodTransmitted = @TransmitMethod,
DateShipTransmitProcessed = @DateProcessed,
ShipmentProcessedBy = @ProcessedBy, Critical = @Critical,
ShipTransmitStatus = @TransmitStatus WHERE JobTableId = @JobTableId
它基本上是尝试将字符串“@Critical”插入到导致截断错误的nchar(1)中。
答案 1 :(得分:1)
您传入的值之一比您尝试插入的列长。如果您可以向我们提供错误输出的行数据样本,我们可以告诉您哪一行。
例如,如果您尝试使用值“是”更新critical
列,则会看到上述错误。