2013-11-15 78 views
-1

CLASS(id,name)在SQL Server 2008數據庫檢查DataTable中仍然= NULL,即使它在數據庫

我在aspx頁面有一個CreateClass功能的記錄:

public void CreateClass(object sender, EventArgs e) 
{ 
    string idclass= txtID.Text; 
    string name= txtName.Text; 

    string sql="select * From CLASS where id="+idclass; 
    Datatable class= excute...; 
    if(class!=null) 
    { 
     LabelError.Text="ID class is existed already!"; 
     return; 
    } 
    else 

    { 
     ... write into database... 
    } 
} 

編譯程序,首先我輸入: txtID.Text= "DDD121"txtName.Text="Class 2"

它仍然有其在數據庫id= DDD121但該方案通過if語句,並跳到裏面else聲明1分的紀錄。爲什麼?當然,在else語句中,id = DDD121的新類無法插入到數據庫中,但我需要顯示錯誤消息。

我檢查在SQL Server查詢窗口中的SQL查詢:select * from CLASS where id='DDD121'它工作正常,1記錄顯示使用id = DDD121。

嘗試調試:

sql= "select * FROM CLASS WHERE ID=DDD121"; 
class=null; 

幫助!!!!是if(class!=null)檢查Datatable是否沒有行的正確方法?

+1

哦,親愛的。與您的問題無關,但將asp.net +'txtId.Text'連接到您的SQL = Classic SQL注入。請閱讀使用參數。 –

回答

1

當您嘗試調試,我懷疑你會看到class不爲空,但它是一個空的DataTable。

這應該給你同樣的提示,測試什麼,而不是class != null

是的,SQL注入。但這超出了這個範圍。我建議不要忽略它。

如果class在調試中爲空,而您確定應該存在一條記錄,那麼我會建議檢查您是否確實連接到數據庫的正確位置,以及是否正確執行查詢。

execute...是絕對不工作,所以也許在實際的代碼的東西都被打亂。

啊,確保你把你想要的值放在''之間。否則它贏了,確實無法工作。 順便說一下,這樣做與SQL注入沒有多大關係。

只是一個提示,一旦你得到這個工作,而不是在你的文本中填寫DDD121,填寫ABC'; DROP TABLE類;並看看會發生什麼;)是SQL注入。

+0

哦,我看到class = null當我調試 –

+0

它有一個警報$異常{「無效的列名'DDD121'。」}所以我認爲問題是SQL注入。 –

0
if(class!=null && class.Rows.Count>0) 
    { 
     LabelError.Text="ID class is existed already!"; 
     return; 
    } 
    else 

    { 
     ... write into database... 
    } 

此代碼檢查空和空數據表

相關問題