2010-12-09 88 views
0

像任何其他問題,我遇到問題,每當我試圖通過UI更新我的DataGridView。這裏是我得到的錯誤:SQL錯誤:字符串或二進制數據將被截斷。該聲明已被終止

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)

現在你得到了列列表和它們的屬性。這裏是一個更新這些列中的代碼:

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

什麼行[「關鍵」]?如果它不止一個字符,那麼你的錯誤是正確的。 – 2010-12-09 19:03:40

+0

請更新您的代碼以使用使用語句。現在,你運行超負荷連接池和獲得樂趣的錯誤,如無法創建連接到SQL服務器的真實可能性... – NotMe 2010-12-09 19:40:12

回答

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

您傳入的值中的一個比您嘗試插入的列長。如果您能向我們提供錯誤的行數據樣本,我們可以告訴您哪一個數據。

例如,如果您嘗試使用值「yes」更新critical列,則會看到上述錯誤。

+0

我該怎麼做? – 2010-12-09 19:04:08