C# 参数化插入查询
我正在努力使用OdbcConnection和MySQL在C#中创建一个参数化的插入查询。如果我在SQL语句中使用字符串连接,它可以正常工作。但是,我需要接受来自文本框的用户输入,这很容易受到SQL注入的攻击 当我尝试设置参数化查询时,命令sorta起作用。数据库中插入了一条记录,因此我知道正在建立连接,并且可以插入一条记录。问题是所有插入的字段值都是空的,就好像它没有读取参数一样 以下代码起作用:C# 参数化插入查询,c#,mysql,parameters,insert,odbc,C#,Mysql,Parameters,Insert,Odbc,我正在努力使用OdbcConnection和MySQL在C#中创建一个参数化的插入查询。如果我在SQL语句中使用字符串连接,它可以正常工作。但是,我需要接受来自文本框的用户输入,这很容易受到SQL注入的攻击 当我尝试设置参数化查询时,命令sorta起作用。数据库中插入了一条记录,因此我知道正在建立连接,并且可以插入一条记录。问题是所有插入的字段值都是空的,就好像它没有读取参数一样 以下代码起作用: public static void Insert(string connectionString
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)代码>啊哈!!哈克曼的建议最终奏效了。使用?标记而不是命名参数起作用,尽管它比使用命名参数稍微容易混淆。