【问题标题】:Select With a String Value Return使用字符串值返回选择
【发布时间】:2015-07-01 13:09:19
【问题描述】:

我有一个应用程序 C# 连接并在数据库中做一些事情,所以我需要在表中找到一个序列号并返回它,我这样做了,但我有一个问题:

public int Select_Begin(string serial)
{
   string query = "SELECT serial FROM `compteur_mono` WHERE   serial = " + serial + ";";
   //Open connection
   MySqlCommand cmd = new MySqlCommand(query, connection);
   if (this.OpenConnection() == true)
   {
      int numero = cmd.ExecuteNonQuery();
      return numero;
   }
   else
   {
      return 0;
   }
}

当我执行结果总是 -1 但是当我这样做时:

public string Select_Begin(string serial)
{
   string query = "SELECT serial FROM `compteur_mono` WHERE   serial = " + serial + ";";
   //Open connection
   MySqlCommand cmd = new MySqlCommand(query, connection);
   if (this.OpenConnection() == true)
   {
       string serial = cmd.ExecuteNonQuery();
       return serial;
   }
   else
   {
      return null;
   }
}

出现此错误:错误 1 ​​无法将类型 'int' 隐式转换为 'string'

请提供一些帮助,我不会使用 dataReader,因为我只有一个序列号可以返回它:* 谢谢

【问题讨论】:

  • 不要使用全局连接,通常最好在您使用它的方法中创建连接,最好使用using 语句以确保它正确关闭。您不必担心它的效率较低。连接池(默认)则相反。
  • 我的序列号可以是x'; DROP TABLE compteur_mono; -- 吗??
  • 如果开发人员 2 认为该方法有用,即使不是今天也可能是明天。所以永远不要连接字符串,而是使用 sql-parameters。
  • 另一个有趣的问题:serial 在表中是唯一的吗?可以有多个匹配项吗?
  • 也不清楚您对该方法的期望。是否要检查该序列是否已存在于表中?然后使用SELECT COUNT(*)....ExecuteScalarSELECT CASE WHEN EXISTS... THEN 1 ELSE 0,如果表很大,效率会更高。

标签: c# string select return


【解决方案1】:

ExecuteNonQuery 不期望查询SELECT serial 是一个查询。将其更改为ExecuteScalar,一切都会奏效。如果可能,您应该添加一些 using 语句并进行参数化,注意。

const string query =
    "SELECT serial FROM `compteur_mono` WHERE serial = @serial;";

using(var cmd = new MySqlCommand(query, connection))
{
    cmd.Parameters.AddWithValue("@serial", serial);
    if (this.OpenConnection())
    {
        return (string)cmd.ExecuteScalar();
    }
    return null;
}

或使用“dapper”:

return connection.Query<string>(
    "SELECT serial FROM `compteur_mono` WHERE serial = @serial;",
    new { serial }).SingleOrDefault();

【讨论】:

  • 嗨 Marc,感谢您的回答我在 executeScalar() 上有一个错误错误 1 ​​无法将类型“对象”隐式转换为“字符串”。存在显式转换(您是否缺少演员表?)
  • @user3645814 如果您在上面查看,我在 38 分钟前编辑了该演员表
猜你喜欢
  • 1970-01-01
  • 2017-12-29
  • 2019-05-09
  • 1970-01-01
  • 1970-01-01
  • 2013-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多