2014-12-18 208 views
1

'=' 操作使用C#,我發現了一個例外:C#錯誤:System.Data.EvaluateException:無法對System.String和System.Int32

System.Data.EvaluateException: Cannot perform '=' operation on System.String and System.Int32.

我追查回驗證碼:

foreach (DataRow rows in dt.Rows){ 

...etc 

string filter = string.Format("CUST_ID = " + rows[0]); 
DataRow[] row = dt.Select(filter); 

foreach我去哪個使用LINQ找到,如果在DT相同CUST_ID記錄在另一數據表中存在一個布爾值後。如果爲false,則我轉到字符串過濾器。在這裏,我將第二個數據表中不存在的所有記錄取出,並使用SqlBulkCopy將它們全部放入數據庫中。

有趣的是,僅僅充滿了記錄的手不起作用。大約有7000個,大約50個會導致這個例外。我沒有看到記錄之間的任何區別。所以,我不確定我錯過了什麼。

編輯:

一個記錄都具有CUST_ID = 998947這將拋出異常。

我改變CUST_ID至987654,也沒有例外。

+0

代碼拋出哪一行? – 2014-12-18 22:40:36

+0

DataRow []行 – 2014-12-18 22:41:37

+0

這是字段CUST_ID的數據類型? – Steve 2014-12-18 22:43:32

回答

3

你應該用撇號輸入你的輸入。另外,使用String.Format時,請提供格式字符串及其參數。不只是字符串,那麼String.Format調用是無用的。試試這個:

string filter = String.Format("CUST_ID = '{0}'", rows[0].ToString()); 

編輯:對不起,誤讀你的問題。如果你的列是整數類型的,不要關心撇號。異常告訴你,你正試圖比較字符串與int。如果你是肯定的,他們是整型,只是很少的代碼審查從我:

string filter = String.Format("CUST_ID = {0}", rows[0].ToString()); 

您也可以嘗試將CUST_ID轉換爲字符串,並將其與值進行比較,但它是沒有太大的很好的解決方案。

+0

需要撇號。刪除它們會導致相同的異常。謝謝! – 2014-12-18 22:47:21

相關問題