2016-06-18 59 views
1

我想通過在刑事數據庫中查找他的NIC號碼來檢查一個人是否有過去的犯罪歷史。但是查詢不會獲取任何數據,儘管數據庫中沒有異常和相關數據,但數據讀取器仍爲空。SQL Server查詢不返回任何結果在asp.net

請參見下面的代碼:

SqlCommand cmd5 = new SqlCommand("select * from criminal where NIC ="+nic, conn); 
string nic = "null"; 

foreach (var person in allInvolved) 
{ 
    conn.Open(); 
    nic = person.NIC; 

    dr3 = cmd5.ExecuteReader(); 

    if (dr3.HasRows) 
    { do something } 
    else if (!dr3.HasRows) 
    { do something else} 
} 

變量NIC中有正確的值,我檢查它在調試。我不知道我哪裏錯了。如果您需要關於代碼的其他信息,請詢問。

在此先感謝。

+1

你需要在'ExecuteReader'行之後調用'dr3'上的'read'。 – muratgu

+0

您將nic定義爲字符串 - 它實際上是一個字符串值還是像您在問題中描述的那樣的數字。如果它是字母數字,則必須將其用SQL中的引號包裝。對不起 - 這就是我所能看到的,對我而言,脫穎而出 – dbmitch

+0

你的意思就像'if(dr3.Read())'?如果是的話,我已經嘗試過了,它沒有工作。 @ muratgu –

回答

2

當你這樣做:

SqlCommand cmd5 = new SqlCommand("select * from criminal where NIC ="+nic, conn); 

nic當前值在那一刻使用;這不要緊,你改變什麼nic事後

nic = person.NIC; 
dr3 = cmd5.ExecuteReader(); 

因爲該值不使用。理想情況下,你應該參數:

SqlCommand cmd5 = new SqlCommand(
    "select * from criminal where NIC = @nic", conn); 
var param = cmd5.Paramters.Add("nic", SqlDbType.SomethingRelevant); 
// ^^^ note: I don't know what the data type is, you'll need to pick that 

foreach(...) { 
    param.Value = ((object)person.NIC) ?? DBNull.Value; 
    using(var dr3 = cmd5.ExecuteReader()) { 
     // ... 
    } 
} 
... 

另外還要注意,很多這些對象都是IDisposable並應在using塊;或者,看看像「小巧玲瓏」的工具,所以你可以做這樣的事情:

var criminals = conn.Query<Criminal>(
    "select * from criminal where NIC = @nic", 
    new { nic = person.NIC}).AsList(); 
+0

感謝您的答覆。當我調試,並採取光標移到'查詢nic',它顯示了正確的NIC,它應該是具有在那個時候查詢,你是否仍然認爲它與你描述的同樣的問題@ Marc-Gravell –

+0

@syed是的,基本上是 –

+0

我實現了這個解決方案,並給出了下面的ex 'executereader'行上的選項 '變量名'@nic'已經被聲明。變量名稱在查詢批處理或存儲過程中必須是唯一的。「 –

1

嘗試此

SqlConnection con = new SqlConnection(connectionString); 
SqlCommand cmd = new SqlCommand(); 
cmd.Connection = con; 
con.Open(); 

foreach (var person in allInvolved) 
{ 
nic = person.NIC; 
cmd.CommandText = "select * from criminal where NIC ="+nic; 
dr3 = cmd.ExecuteReader(); 

while (dr3.Read()) 
{ 
     if (dr3.HasRows) 
     { do something} 
     else if (!dr3.HasRows) 
     { do something else} 
} 

} con.Close();

+0

還是一樣:( –

+0

只是調試它吧。你肯定你的數據庫有數據嗎?@SyedHarisAliGhaznavi – NEER

+0

是的,我調試它的NIC變量有它的值複製我並粘貼,淡水河谷在SQL工作室和執行查詢並得到所需的結果,但在ASP.NET相同的參數,它說的是DataReader的是空@NeerPriv –