2012-12-24 92 views
0

我試圖用MySQL數據庫中的結果填充DataTable,但DataTable雖然已初始化,但未填充。我想用這個DataTable填充一個ListView。以下是我已經得到了DataTable的設置:使用MySQL在C#中填充DataTable

public DataTable SelectCharacters(string loginName) 
    { 
     this.Initialise(); 
     string connection = "0.0.0.0"; 
     string query = "SELECT * FROM characters WHERE _SteamName = '" + loginName + "'"; 

     if (this.OpenConnection() == true) 
     { 
      MySqlCommand cmd = new MySqlCommand(query, connection); 
      MySqlDataAdapter returnVal = new MySqlDataAdapter(query,connection); 
      DataTable dt = new DataTable("CharacterInfo"); 
      returnVal.Fill(dt); 
      this.CloseConnection(); 
      return dt; 
     } 
     else 
     { 
      this.CloseConnection(); 
      DataTable dt = new DataTable("CharacterInfo"); 
      return dt;    
     } 
    } 

而且爲ListView的填充,我有:

private void button1_Click(object sender, EventArgs e) 
    { 
     string searchCriteria = textBox1.Text; 

     dt = characterDatabase.SelectCharacters(searchCriteria); 
     MessageBox.Show(dt.ToString()); 

     listView1.View = View.Details; 

     ListViewItem iItem; 
     foreach (DataRow row in dt.Rows) 
     { 
      iItem = new ListViewItem(); 
      for (int i = 0; i < row.ItemArray.Length; i++) 
      { 
       if (i == 0) 
        iItem.Text = row.ItemArray[i].ToString(); 
       else 
        iItem.SubItems.Add(row.ItemArray[i].ToString()); 
      } 
      listView1.Items.Add(iItem); 
     } 
    } 

有我丟失的東西? MessageBox包含在內,所以我可以看到它是否已經填充,但沒有運氣。

感謝您提供任何幫助。

+1

從來沒有見過這種類型的連接字符串,字符串連接=「0.0.0.0」 ; – TalentTuner

+0

您的連接是否打開? – mjroodt

回答

1

嗯,我......想不通,你在這裏做什麼,所以我會貼上我的代碼與我「M填充的DataGridView:

1)連接應該是這個樣子(如果本地主機爲您的服務器,否則,服務器計算機的IP地址):

string connection = @"server=localhost;uid=root;password=*******;database=*******;port=3306;charset=utf8"; 

2)查詢是好的(它會返回給你),但你不應該建立這樣的SQL語句..使用參數。見SQL injection

3)代碼:

void SelectAllFrom(string query, DataGridView dgv) 
     { 
      _dataTable.Clear(); 

      try 
      { 
       _conn = new MySqlConnection(connection); 
       _conn.Open(); 
       _cmd = new MySqlCommand 
       { 
        Connection = _conn, 
        CommandText = query 
       }; 
       _cmd.ExecuteNonQuery(); 

       _da = new MySqlDataAdapter(_cmd); 
       _da.Fill(_dataTable); 

       _cb = new MySqlCommandBuilder(_da); 

       dgv.DataSource = _dataTable; 
       dgv.DataMember = _dataTable.TableName; 
       dgv.AutoResizeColumns(); 

       _conn.Close(); 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message); 
      } 
      finally 
      { 
       if (_conn != null) _conn.Close(); 
      } 
     } 

所以,我想顯示mysql數據庫中我把這個方法表中的一些內容,每一次,通過查詢字符串和datagridview的名字給這個方法。就是這樣。

爲了您的利益,請將此示例與您的示例進行比較,然後查看您可以在兩者之間使用哪些內容。也許,listview對你來說並不是最好的,只是說...

希望這會對你有所幫助。

+0

輝煌。編輯我的類似於此 - 但給了它與附加數據的返回值。謝謝。 – Warjekk

+0

很高興它幫助你,你也不只是複製/粘貼代碼。:-) – Sylca

0

調試你的應用程序,看看你的sql語句/連接字符串是否正確,並返回一些值,同時驗證你的應用程序是否沒有拋出任何異常。

0

您的連接字符串無效。

進行如下設置:

connection = "Server=myServer;Database=myDataBase;Uid=myUser;Pwd=myPassword;"; 

參見:mysql connection strings

+0

真正的連接字符串被設置在這個之上 - 我忘記了包含它的錯誤 – Warjekk

0

這裏下面爲什麼代碼將無法正常工作。

  1. 連接
    您的MySQL連接是無效的
  2. 查詢
    我想你想在table此查詢

string query = "SELECT * FROM characters WHERE _SteamName LIKE '" + loginName + "%'";

進行搜索,嘗試

請注意LIKE%這可能有助於列出所有數據。
更多細節String Comparison Functions

1

檢查您的連接字符串,而是使用

MySqlCommand cmd = new MySqlCommand(query, connection); 
MySqlDataAdapter returnVal = new MySqlDataAdapter(query,connection); 
DataTable dt = new DataTable("CharacterInfo"); 
returnVal.Fill(dt); 
this.CloseConnection(); 
return dt; 

你可以使用這個

MySqlCommand cmd = new MySqlCommand(query, connection); 
DataTable dt = new DataTable(); 
dt.load(cmd.ExecuteReader()); 
return dt;