2016-06-08 58 views
-1

我想自動完成,我得到這個錯誤,我不知道如何修復它'System.Data.Common.DbDataReader.GetString(int)'的最好的重載方法匹配有一些無效參數

這裏是我的代碼:

void AutoCompleteText(){ 
     Search_Box.AutoCompleteMode = AutoCompleteMode.SuggestAppend; 
     Search_Box.AutoCompleteSource = AutoCompleteSource.CustomSource; 
     AutoCompleteStringCollection coll = new AutoCompleteStringCollection(); 

     SqlCeCommand cmd = new SqlCeCommand("select * from Contact_List ;", con); 
     SqlCeDataReader reader; 
     try 
     { 
      con.Open(); 
      reader = cmd.ExecuteReader(); 
      while (reader.Read()) 
      { 
       string sName = reader.GetString("Name"); 
       coll.Add(sName); 
      } 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
     Search_Box.AutoCompleteCustomSource = coll; 
    } 

我從

string sName = reader.GetString("Name"); 

得到這個錯誤,我也得到:無法從 '字符串' 到 '廉政'

轉換

需要幫助

+5

DataReader'GetString'函數需要列索引號,而不是列名。你可以使用'reader [「Name」]。ToString()'來代替。 – LarsTech

+5

它告訴你問題是什麼。你需要傳遞一個int,而不是一個字符串。我建議閱讀文檔。 –

+0

非常感謝LarsTech –

回答

-2

SqlReader通過使用列名支持「Get」。 (SqlReader不是你所擁有的)。

IDataReader和DbDataReader「Get」方法需要一個ORDINAL數字。如0,1,2

這裏是一個變化來展示一下我說的是:

SqlCeCommand cmd = new SqlCeCommand("select MyInt32Column, MyVarCharColumn, MyBitColumn from MyTable;", con); 
    SqlCeDataReader reader; 
    try 
    { 
     con.Open(); 
     reader = cmd.ExecuteReader(); 
     while (reader.Read()) 
     { 
      int myInt32Value = reader.GetInt32(0); 
      string myStringValue = reader.GetString(1); 
      bool myBooleanValue = reader.GetBoolean(2); 
     } 

獎勵:你也可以有一個問題與數據類型。如果是這樣,您可以這樣做:

使用「GetValue(N)」方法。

像這樣

object o = reader.GetValue(0); 
string mytype = o.GetType().ToString(); 

這是調試code..it會告訴你的價值和數據類型。

然後放回正確的.GetString或GetInt32等,等,等

PS

這是使用 「SELECT *」 的危險。你應該在列名中。我會重複一遍,你應該輸入列名,這樣你就可以看到你期望的列。