【问题标题】:Struggling with Parameterized Insert Query [duplicate]挣扎于参数化插入查询 [重复]
【发布时间】:2019-10-16 13:44:16
【问题描述】:

我真的很难用 OdbcConnection 和 MySQL 在 C# 中创建参数化插入查询。如果我在 SQL 语句中使用字符串连接,它可以正常工作。但是,我需要接受来自文本框的用户输入,这很容易受到 SQL 注入的攻击。

当我尝试设置参数化查询时,命令 sorta 有效。一条记录被插入到数据库中,所以我知道正在建立连接并且可以插入一条记录。问题是所有插入的字段值都是空的,就好像它没有读取参数一样。

以下代码有效:

public static void Insert(string connectionString, Vendor vendor)
{
     using (OdbcConnection connection = new OdbcConnection(connectionString))
     {
          string SQL = "INSERT INTO tbl_vendor (name) VALUES (\"" + vendor.Name + "\")";
          using (OdbcCommand command = new OdbcCommand(SQL, connection))
          {
               connection.Open();
               command.ExecuteNonQuery();
          }
     }
}

以下代码插入一条空记录:

public static void Insert(string connectionString, Vendor vendor)
{
     using (OdbcConnection connection = new OdbcConnection(connectionString))
     {
          string SQL = "INSERT INTO tbl_vendor (name) VALUES (@name)";
          using (OdbcCommand command = new OdbcCommand(SQL, connection))
          {
               OdbcParameter parameter = new OdbcParameter("@name", vendor.Name);
               command.Parameters.Add(parameter)

               connection.Open();
               command.ExecuteNonQuery();
          }
     }
}

我已经尝试了上述代码的一百万种不同的变体。他们似乎都工作,但每次他们只插入一个空记录。我可能遗漏了一些明显的东西并使事情变得比他们需要的更复杂,但我做错了什么?

【问题讨论】:

  • 您是否使用过硬编码的SQL 字符串(例如INSERT INTO tbl_vendor (name) VALUES ('test'))?
  • 在调用 ExecuteNonQuery 方法之前,需要将值设置为参数:`parameter.Value = 'Something'。
  • 你可以试试这个sql字符串string SQL = "INSERT INTO tbl_vendor (name) VALUES (?)";和使用这个参数OdbcParameter parameter = new OdbcParameter("?", vendor.Name);
  • 啊哈!!哈克曼的建议最终奏效了。使用 ?标记而不是命名参数有效,尽管它比使用命名参数更令人困惑。

标签: c# mysql parameters insert odbc


【解决方案1】:

测试指定数据类型:

OdbcParameter parameter = new OdbcParameter("@name", OdbcType.VarChar);
parameter.Value = vendor.Name;
command.Parameters.Add(parameter);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-28
    • 1970-01-01
    • 2013-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-03
    相关资源
    最近更新 更多