2013-11-15 28 views
-1

我需要檢查記錄是否保存到數據庫中。如果它以另一種形式保存在數據庫中,則顯示一條消息,指出它不在數據庫中。
如果記錄是不是在數據庫中,我得到這個錯誤Object reference not set to an instance of an object.
這是我的代碼,請幫我在這裏找到的錯誤:未將對象引用設置爲對象的實例c#錯誤

string cmdStr = "Select NO from COM_LIST_EXPORT where NO = '" + txtNO.Text + "'"; 
SqlCommand cmd = new SqlCommand(cmdStr, CN); 
int count = (int)cmd.ExecuteScalar(); 
if (count == Convert.ToInt32(txtNO.Text)) 
{ 
    Archive_Sader dd = new Archive_Sader(); 
    dd.Show(); 
} 

else 
{ 
    MessageBox.Show("please save first"); 
} 
+0

我喜歡一點SQL注入。 –

+0

我會一直在使用您的查詢參數。這對SQLi很脆弱 –

+0

你在哪裏創建對象'CN'? 也看看參數化的查詢。 – jAC

回答

2

ExecuteScalar回報null時發現沒有記錄。

所以嘗試投放時null -> int你得到一個NullReferenceException

試試這個。

int count = Convert.ToInt32(cmd.ExecuteScalar()); 

Convert.ToInt32將返回0當參數null

1

SqlCommand.ExecuteScalar

返回值

如果結果集爲空,則結果集中第一行的第一列或空 引用。

這就是爲什麼當沒有行作爲一個結果,你真正嘗試null轉換爲Int32

看起來像你需要改變你的路線;

int count = Convert.ToInt32(cmd.ExecuteScalar()); 

因爲Convert.ToInt32回報0當參數null

返回值

一個32位帶符號整數,它等效於在值或 0(零),如果值是空的數量,。

而且您應該始終使用parameterized queries。這種字符串連接對於SQL Injection攻擊是開放的。

例如;

string cmdStr = "Select NO from COM_LIST_EXPORT where NO = @NO"; 
SqlCommand cmd = new SqlCommand(cmdStr, CN); 
cmd.Parameters.AddWithValue("@NO", txtNO.Text); 
... 
+1

@Downvoter至少留心評論,以便我可以看到我可能會出錯的地方? –

+1

我沒有看到任何理由downvote這..我的+1 .. –

+1

@SriramSakthivel看起來像仇敵會討厭':)' –

相關問題