[英]SqlDataReader can only check for one of (Null or non null value)
我正在編寫一個程序(供個人使用),將卡名存儲到數據庫中。 我想實現一種方法來查看名稱是否已經存在,如果存在,它將 go 在“Do_have_in_db_listbox”中,否則它將 go 在“do_not_have_list_box”中。 這是我這樣做的原始方法:
while (retrieve.Read())
{
if(retrieve["Card"] != DBNull.Value)
{
listBox_haveInDB.Items.Add(word_for_query);
}
else if (retrieve["Card"] == DBNull.Value)
{
listBox_notINDb.Items.Add(word_for_query);
}
}
我在沒有 While 循環的情況下嘗試過這個,我嘗試過 if、else、else if 和條件的變體。 但無論出於何種原因,無論第一個條件是什么,else 語句都不會執行。 我一直在尋找並嘗試解決問題,但唯一對我有用的是異常處理程序:
retrieve.Read();
try
{
if(retrieve["Card"] != DBNull.Value)
{
listBox_haveInDB.Items.Add(word_for_query);
}
}
catch
{
listBox_notINDb.Items.Add(word_for_query);
}
這是我解決它的方法。 我究竟做錯了什么?
要評估數據庫字段以確定它們的值是否為 DBNull,可以將字段值傳遞給 DBNull.Value.Equals 方法。 但是,這種方法很少使用。
DBNull.Value.Equals(retrieve["Card"] )
嘗試使用這種語法。 這是最可靠的方法:
if (!reader.IsDBNull( reader.GetOrdinal("Card")))
{
listBox_haveInDB.Items.Add( ...your code
}
或者您也可以使用索引
if (!reader.IsDBNull( column_index )
Card
是數據表中的一個字段嗎? 如果數據表中有任何數據, retrieve["Card"]
永遠不會是 null。
我想實現一種方法來查看名稱是否已經存在
如果要檢查數據表中是否存在word_for_query
,則需要將retrieve["Card"].ToString()
與word_for_query
進行比較,而不是DBNull.Value
。
SqlDataReader retrieve = cmd.ExecuteReader();
try
{
while (retrieve.Read())
{
if (retrieve["Card"].ToString() == word_for_query)
{
// if exists, show in listBox_haveInDB and return
listBox_haveInDB.Items.Add(word_for_query);
return;
}
}
// not exists
listBox_notINDb.Items.Add(word_for_query);
}
catch (Exception ex)
{
Console.WriteLine("\nError:\n{0}", ex.Message);
}
finally
{
retrieve.Close();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.