使用MySQL在C#中填充DataTable

时间:2012-12-24 10:24:42

标签: c# .net mysql database listview

我正在尝试使用从MySQL数据库中提取的结果来填充DataTable,但DataTable虽然已初始化但未填充。我想使用此DataTable来填充ListView。以下是我为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被包含在内,所以我可以看到它是否填充了,没有运气。

感谢您提供任何帮助。

5 个答案:

答案 0 :(得分:2)

好吧,我......无法弄清楚你在这里做了什么,所以我会把你的代码粘贴到我正在填充datagridview:

1)连接看起来像这样(如果localhost是你的服务器,否则,服务器机器的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对你来说不是最好的,只是说......

希望这会对你有所帮助。

答案 1 :(得分:2)

检查连接字符串,而不是使用

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;

答案 2 :(得分:0)

调试你的应用程序,看看你的sql语句/连接字符串是否正确并返回一些值,同时验证你的应用程序是否没有抛出任何异常。

答案 3 :(得分:0)

您的连接字符串无效。

设置如下:

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

参考:mysql connection strings

答案 4 :(得分:0)

以下为代码无效的原因。

  1. 连接
    您的mySQL连接无效
  2. 查询
    我想你想在table中搜索,试试这个查询
  3. string query = "SELECT * FROM characters WHERE _SteamName LIKE '" + loginName + "%'";

    注意LIKE%这有助于列出所有数据。
    了解更多详情String Comparison Functions