0

我正在尝试使用从 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 已包含在内,因此我可以查看它是否已填充,但不走运。

谢谢你提供的所有帮助。

4

5 回答 5

6

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

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;
于 2017-07-17T02:56:26.097 回答
4

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

1)连接应该是这样的(如果 localhost 是您的服务器,否则,服务器机器的 IP 地址):

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

2)查询没问题(它会返回一些东西),但你不应该构建这样的 SQL 语句......改用参数。请参阅SQL 注入

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 对你来说不是最好的,只是说......

希望这会对您有所帮助。

于 2012-12-24T11:33:33.963 回答
0

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

于 2012-12-24T11:08:13.300 回答
0

您的连接字符串无效。

设置如下:

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

参考:mysql连接字符串

于 2012-12-24T11:31:56.520 回答
0

以下是代码不起作用的原因。

  1. Connection
    你的mySQL的连接无效
  2. 查询
    我猜你想在 中搜索table,试试这个查询

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

注意LIKE%这可能有助于列出所有数据。
更多细节字符串比较函数

于 2012-12-24T11:54:00.247 回答