SQL错误:字符串或二进制数据将被截断。该语句已终止

时间:2010-12-09 19:00:29

标签: asp.net sql sql-server

像我在尝试通过UI更新DataGridView时遇到的任何其他问题一样。这是我得到的错误:

SQLException未处理。字符串或二进制数据将被截断。声明已经终止。

现在这是我要更新的列列表:

  1. ShipTrackingNumber(nvarchar(100),null)

  2. ShipMethodTransmitted(nvarchar(50),null)

  3. DateShipTransmitProcessed(datetime,null)

  4. ShipmentProcessedBy(nvarchar(50),null)

  5. 严重(nchar(1),null)

  6. ShipTransmitStatus(nvarchar(50),null)

  7. 现在您已获得列列表及其属性。以下是更新这些列的代码:

    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();
      } 
    }
    

    }

    任何人都可以在这方面帮助我。谢谢!

2 个答案:

答案 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列,则会看到上述错误。