我跟着this线程尝试设置与MySQL
的连接并运行预准备语句(与他们正在讨论的线程Postgresql
中的细微差别)。这就是我所做的:
IDbConnection cnx = new MySqlConnection(connectionString);
cnx.Open();
IDbCommand cmd = cnx.CreateCommand();
string sql = "insert into table1 (column2) values ($1)";
cmd.CommandText = sql;
IDbDataParameter param = cmd.CreateParameter();
param.DbType = DbType.AnsiString;
param.ParameterName = "1";
param.Value = "Parameter Value";
cmd.Parameters.Add(param);
cmd.ExecuteNonQuery();
但结果是,我收到了错误消息:
MySql.Data.MySqlClient.MySqlException:只能存储MySqlParameter对象 at MySql.Data.MySqlClient.MySqlParameterCollection.Add(System.Object value)[0x00000] in:0
我应该补充一点,我特意使用IDbConnection
,因为后来我想将这个代码重用于其他数据库,这种方法可以节省数百行代码。
答案 0 :(得分:3)
使用@
作为名称装饰者,而不是$
string sql = "insert into table1 (column2) values (@value)";
...
cmd.Parameters.Add("@value", MySqlDbType.AnsiString).Value = "Parameter Value";