【问题标题】:mysql command executescalar returns null in C#mysql命令executescalar在C#中返回null
【发布时间】:2015-07-09 15:58:15
【问题描述】:

假设我有一个如下所示的查询结果:

ID    NAME    Phone
----  ----    -----
1     John    123456
2     John    125678
3     John    345678
4     Abby    456789
5     Abby    567890

我只想返回姓名的单行实例:John,其中电话号码类似于“12%”。

在 c# 中,我编写了这个语法来获取 PersonName 变量作为查询的结果。

MySqlConnection connection = new MySqlConnection("SERVER=" + "localhost" + ";" + "DATABASE=" + "testdb" + ";" + "UID=" + "root" + ";" + "PASSWORD=" + "" + ";");
MySqlCommand command = new MySqlCommand();    

    connection.Open();
    string selectQuery = "SELECT NAME FROM testtable WHERE Phone LIKE '12%' ORDER BY ID LIMIT 1";
    command.Connection = connection;
    command.CommandText = selectQuery;
    string PersonName = (string)command.ExecuteScalar();
    connection.Close();

我不知道我的代码有什么问题,但 PersonName 返回 null。我做错了什么?

【问题讨论】:

  • 当您直接对数据库运行 selectQuery(而不是通过您显示的代码)时,结果是什么?
  • 电话栏是文本还是数字栏?
  • 它返回值为 John 的 1 列 1 行。
  • 另外:不要忘记使用 try/finally 或使用块来包装您的连接对象,否则您最终可能会将自己锁定在数据库之外。
  • 它是一个数字列。当我直接对数据库运行查询时,它会返回 John,就像我预期的那样。我确实以类似的命令启动顺序插入表查询。我找不到我的代码的错误。

标签: c# mysql executescalar


【解决方案1】:

我们必须在这里遗漏其他东西。根据您提供的内容尝试以下代码示例:

try {
MySqlConnection connection = new MySqlConnection("SERVER=localhost;DATABASE=testdb;UID=root;PASSWORD=;");
MySqlCommand command = new MySqlCommand();    

connection.Open();
string selectQuery = "SELECT NAME FROM testtable WHERE Phone LIKE '12%' ORDER BY ID LIMIT 1";
command.Connection = connection;
command.CommandText = selectQuery;
string PersonName = (string)command.ExecuteScalar();
}
catch (Exception ex) {
MessageBox.Show(ex.Message);
}
finally {
    connection.Close();
}

我有一种感觉,由于某种原因,对 .Open() 的调用失败了,并且错误正在其他地方被吞没。试试上面的方法,让我知道你发现了什么。

【讨论】:

    【解决方案2】:

    执行此操作:将 (string)command.ExecuteScalar(); 更改为 Convert.ToString(command.ExecuteScalar());

    MySqlConnection connection = new MySqlConnection("SERVER=" + "localhost" + ";" + "DATABASE=" + "testdb" + ";" + "UID=" + "root" + ";" + "PASSWORD=" + "" + ";");
    

    MySqlCommand 命令 = new MySqlCommand();

    connection.Open();
    string selectQuery = "SELECT NAME FROM testtable WHERE Phone LIKE '12%' ORDER BY ID LIMIT 1";
    command.Connection = connection;
    command.CommandText = selectQuery;
    string PersonName = Convert.ToString(command.ExecuteScalar());
    connection.Close();
    

    【讨论】:

      猜你喜欢
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 2014-05-04
      相关资源
      最近更新 更多