Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 参数化插入查询_C#_Mysql_Parameters_Insert_Odbc - Fatal编程技术网

C# 参数化插入查询

C# 参数化插入查询,c#,mysql,parameters,insert,odbc,C#,Mysql,Parameters,Insert,Odbc,我正在努力使用OdbcConnection和MySQL在C#中创建一个参数化的插入查询。如果我在SQL语句中使用字符串连接,它可以正常工作。但是,我需要接受来自文本框的用户输入,这很容易受到SQL注入的攻击 当我尝试设置参数化查询时,命令sorta起作用。数据库中插入了一条记录,因此我知道正在建立连接,并且可以插入一条记录。问题是所有插入的字段值都是空的,就好像它没有读取参数一样 以下代码起作用: public static void Insert(string connectionString

我正在努力使用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();
          }
     }
}

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

指定数据类型的测试:

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

您是否已使用hadrcoded
SQL
字符串(例如
插入tbl_供应商(名称)值('test')
)?在调用ExecuteOnQuery方法之前,您需要将值设置为参数:`parameter.value='Something'。您可以尝试使用此SQL字符串
string SQL=“插入tbl_供应商(名称)值(?)并使用此参数
OdbcParameter=new-OdbcParameter(“?”,vendor.Name)啊哈!!哈克曼的建议最终奏效了。使用?标记而不是命名参数起作用,尽管它比使用命名参数稍微容易混淆。