C# 将 select 从 mysql 写入变量

C# write select from mysql to variable

我在 mysql 中保存来自 select 的变量时遇到了一个大问题。

我写了下面的代码:

string connectionstring = @"****;userid=*****;
password=***;database=***";
cnn = new MySqlConnection(connectionstring);
cnn.Open();
MySqlDataReader reader = null;
string query_date = "SELECT computer_name from wp_users where user_login = @login";
MySqlCommand command2 = new MySqlCommand(query_date, cnn);
command2.Parameters.AddWithValue("@login", metroTextBox.Text);
reader = command2.ExecuteReader();
while (reader.Read())
{
   string ColumnName = (string)reader["computer_name"];
}
cnn.Close();

我尝试了很多命令,例如 ExecuteReader、ExecuteNonQuery、ExecuteScalar。但是 none 他们工作了,我得到了同样的错误:

真的不知道这里出了什么问题我搜索了很多但没有找到任何形式的解决方案。请帮忙。

编辑 1

我只是按照你写的方式做了这个:

     string connectionstring = @"****;userid=*****;
        password=***;database=***";
        cnn = new MySqlConnection(connectionstring);
        cnn.Open();
        MySqlDataReader reader = null;
        string query_date = "SELECT computer_name from wp_users where user_login = @login";
        MySqlCommand command2 = new MySqlCommand(query_date, cnn);
        command2.Parameters.AddWithValue("@login", metroTextBox.Text);
        DataTable table = new DataTable("ResultTable");
            MySqlDataAdapter adapter = new MySqlDataAdapter(command2);
            adapter.Fill(table);

            // This is the important line
            string result = table.Rows[0].ToString();

            cnn.Close();

和之前一样的错误,只是另一个地方。这里发生了什么……只是不知道。 附加信息的英文意思:字典中不存在该键

编辑 2

最有趣的是当我尝试用代码更新时:

 string connectionstring = @"****;userid=*****;
    password=***;database=***";
    cnn = new MySqlConnection(connectionstring);
    cnn.Open();
    MySqlDataReader reader = null;
    string upd = "UPDATE w_users Set computer_name = CURRENT_DATE where user_login =  @login";
    MySqlCommand command2 = new MySqlCommand(upd, cnn);
    command2.Parameters.AddWithValue("@login", metroTextBox.Text);
    DataTable table = new DataTable("ResultTable");
    SqlDataAdapter adapter = new MySqlDataAdapter(command2);
    adapter.Fill(table);
    cnn.Close();

这工作正常,没有任何错误,只需更新我的 table... 这有什么意义

编辑 3

我只是尝试使用 ExecuteScalar() 但我仍然有同样的错误:

这个异常想告诉你,你的结果集中没有匹配的键。键区分大小写。您是否尝试过用全部大写字母拼写您的列名称:(string)reader["COMPUTER_NAME"]?

数据库倾向于return大写的列名,即使您选择小写的列名也是如此。

如果您有 MySqlDataAdapter,请尝试以下代码是否适合您:

string connectionstring = @"****;userid=*****;
password=***;database=***";
cnn = new MySqlConnection(connectionstring);
cnn.Open();

string query_date = "SELECT computer_name AS `computer_name` FROM wp_users WHERE user_login = @login";

MySqlCommand command2 = new MySqlCommand(query_date, cnn);
command2.Parameters.AddWithValue("@login", metroTextBox.Text);

DataTable table = new DataTable("ResultTable");
MySqlDataAdapter adapter = new MySqlDataAdapter(command2);
adapter.Fill(table);

// This is the important line
string result = table["computer_name"];

cnn.Close();

解决方法很简单:

mysql.data.dll 更新到最新版本修复了它 (https://dev.mysql.com/downloads/connector/net/6.9.html)。