2014-10-30 118 views
0

在我的應用程序我想鏈接兩個文本框自動完成方法與MySQL數據庫列。第一列有3個值,第二列有7個值。從數據庫中獲取字符串值沒有空值C#

這樣

+---------+---------------+--------------+ 
+appsetid + category + subcategory + 
+---------+---------------+--------------+ 
+ 1  + property pres + Bankruptcy + 
+ 2  + attorney  + app   + 
+ 3  + valuation  + unknown  + 
+ 4  + -null-  + mitigate  + 
+ 5  + -null-  + property re + 
+ 6  + -null-  + close  + 
+ 7  + -null-  + unk12  + 
+---------+---------------+--------------+ 

我wanto獲得此列衣被合計爲我的文本框自動完成values.but後,我撥打以下方法1文本框自動完成送3倍的值,但第二個文本框自動完成僅完成1日的3個值。我試圖使用isnullorempty填充文本框,但它不工作

這是我用來填充自動完成文本框的代碼。

兩個文本框中Autocompletemode設置爲suggestappend和autocompleet源設置爲customsource

private void maintxtautocomplete() 
{ 
    AutoCompleteStringCollection call = new AutoCompleteStringCollection(); 
    AutoCompleteStringCollection call2 = new AutoCompleteStringCollection(); 

    string constring = string.Format("Server=127.0.0.1;Database=claimspro;Uid=root;Pwd=***************;"); 
    string Query1 = "select * from appsettings ;"; 
    MySqlConnection conwaqDatabase2 = new MySqlConnection(constring); 
    MySqlCommand cmdwaqDatabase2 = new MySqlCommand(Query1, conwaqDatabase2); 
    MySqlDataReader myreader; 

    try 
    { 
     conwaqDatabase2.Open(); 
     myreader = cmdwaqDatabase2.ExecuteReader(); 

     while (myreader.Read()) 
     { 
      string sName2 = myreader.GetString("subcategory"); 
      if (!string.IsNullOrEmpty(sName2)) 
      { 
       call.Add(sName2); 
      }; 

      string sName1 = myreader.GetString("category"); 
      if (!string.IsNullOrEmpty(sName1)) 
      { 
       call2.Add(sName1); 
      }; 
     } 
    } 

    catch 
    { 
    } 

    categorytxtbox.AutoCompleteCustomSource = call2; 
    subcategorytxtbox.AutoCompleteCustomSource = call; 
    conwaqDatabase2.Close(); 
} 
+0

有人知道如何解決這個問題? :( – 2014-10-30 18:57:38

回答

0

終於我解決了我的問題,用dbnull包裝我的鑄造方法if語句

if (myreader["category"] != DBNull.Value) 
     { 
      string sName1 = myreader.GetString("category"); 
      call2.Add(sName1); 
      comboBox1.Items.Add(sName1); 
     }; 

    if (myreader["subcategory"] != DBNull.Value) 
     { 
      string sName2 = myreader.GetString("subcategory"); 
      call.Add(sName2); 
      comboBox2.Items.Add(sName2); 
     }; 

感謝所有誰試圖想幫助我:)

0

GetString方法試圖從數據庫中投下NULL的字符串時,會拋出異常。所以發生的事情是,在第四張唱片中,它正在向你空空如也。在投射之前,您需要檢查值是否爲NULL。

你要更改您的代碼是這樣的:

public static class DataReaderExtensions 
    { 

      public static string GetStringOrNull(this IDataReader dataReader, string columnName) 
      { 
        try 
        { 
          object value = dataReader[columnName]; 
          return (value == null || value == DBNull.Value) ? null : (string)value; 
        } 
        catch (Exception exception) 
        { 
          throw new ApplicationException(String.Format("Invalid 'String' data type for column '{0}'", columnName), exception); 
        } 
      } 

      ... 
    } 

這將允許你做到以下幾點:

var catValue = myreader.GetValue("category"); 
string sName1 = catValue == DBNull.Value ? string.Empty : catValue.ToString(); 
+0

這是行不通的,它給了我像isdbnull錯誤不存在於當前上下文 – 2014-10-31 07:12:18

+0

你是對的,編輯使用正確的屬性 – Mitchell 2014-10-31 14:05:03

0

我一直在使用這個有用的擴展方法發現:

using Extensions; // your extension namespace 

string sName2 = myreader.GetStringOrNull("subcategory"); 
if (!string.IsNullOrEmpty(sName2)) 
{ 
...