2015-04-30 113 views
0

我正在使用下面的代碼來獲取數據庫中存在的記錄的計數,但不知何故它不工作。查詢獲得來自MS Access數據庫記錄的計數

扔我一個錯誤:

Input string was not in a correct format.

conn.Open();      
OleDbCommand cmd1 = new OleDbCommand(); 
cmd1.CommandText = "select count(*) from Orders_Description where (ItemCode=" + Convert.ToInt32(row.Cells[1].Value) + ") and (OrderId=" + Convert.ToInt32(txtOrderNo.Text) + ")"; 
int recordExists = Convert.ToInt32(cmd1.ExecuteScalar()); 
if (recordExists > 0) 
{ 
    //Insert command if record exists. 
} 
+1

「row.Cells [1] .Value」和「txtOrderNo.Text」的值究竟是什麼?什麼是你的「CurrentCulture」?調試您的代碼並告訴我們。並且請始終使用[參數化查詢](http://blog.codinghorror.com/give-me-parameterized-sql-or-give-me-death/)。這種字符串連接對於[SQL注入](http://en.wikipedia.org/wiki/SQL_injection)攻擊是開放的。 –

+0

'row.Cells [1] .Value'和'txtOrderNo.Text'包含整數值,並且在數據庫中也有一個整型 –

+0

您的評論根本沒有幫助。這些值完全**是什麼? 「ItemCode」和「OrderId」列的類型是什麼? –

回答

0

此錯誤來自正在構建SQL查詢的Convert.ToInt32。這意味着txtOrderNo.Textrow.Cells[1].Value包含非整數值,小數點或只是空字符串。從MSDN文檔Convert.ToInt32一個FormatException會被拋出時:

value does not consist of an optional sign followed by a sequence of digits (0 through 9).

此外,你(嘗試)將數字轉換爲Int32但然後用它們作爲字符串,多餘的操作。簡單的解決方案是去除轉換操作,但仍然會給你一個無效的SQL語句,並且對SQL注入攻擊非常開放。

+0

感謝'@ DavidG' ......我將空白文本字段轉換爲整數。這是造成錯誤的原因。 –

0

u需要單引號之前和在該領域的情況下,數據類型指定的OrderId值後相當於爲nvarchar(不是數字)。

您的代碼:

(的OrderId =」 + Convert.ToInt32(txtOrderNo.Text)+ 「)」;

正確的代碼與單qutations插入:

(的OrderId ='」 + txtOrderNo.Text +「')」;

+0

你怎麼知道'ItemCode'列的類型?它是數字,OP不需要使用單引號。 –

+0

正如我所解釋的,它的情況下,該字段的數據類型是nvarchar等效(不是數字) –

+0

@MladenOršolić:我試過用單引號,但給出了相同的錯誤..'ItemCode'和'OrderId'在數據庫中有一個Integer類型 –