将参数传递给 mySQL 数据库的 IdbCommand
Posted
技术标签:
【中文标题】将参数传递给 mySQL 数据库的 IdbCommand【英文标题】:Passing parameters to IdbCommand for mySQL database 【发布时间】:2013-04-02 02:27:43 【问题描述】:我正在尝试使用 IdbCommand 做一些相对简单的事情来执行插入查询。
代码如下:
using (IDbConnection conn = DbHelper.GetConnection(DbConnString))
using (IDbCommand com = conn.CreateCommand())
com.CommandType = CommandType.Text;
com.CommandText =
String.Format(
"INSERT INTO 0 (`Date`, User, Type, `Comment`) VALUES (@Date, @User, @Type, @Comment);",
TableName);
conn.Open();
var parameterDate = com.CreateParameter();
parameterDate.ParameterName = "@Date";
parameterDate.Value = entry.Date;
parameterDate.DbType = DbType.DateTime;
com.Parameters.Add(parameterDate);
var parameterUser = com.CreateParameter();
parameterUser.ParameterName = "@User";
parameterUser.Value = entry.User;
parameterUser.DbType = DbType.String;
com.Parameters.Add(parameterUser);
var parameterLogType = com.CreateParameter();
parameterLogType.ParameterName = "@Type";
parameterLogType.Value = entry.Type;
parameterLogType.DbType = DbType.Int32;
com.Parameters.Add(parameterLogType);
var parameterComment = com.CreateParameter();
parameterComment.ParameterName = "@Comment";
parameterComment.Value = entry.Comment;
parameterComment.DbType = DbType.String;
com.Parameters.Add(parameterComment);
com.ExecuteNonQuery();
但我不断收到带有消息“列'日期'不能为空”的 mysqlException。
我所有的选择工作正常,只是这个插入有问题,我看不出有什么明显的问题。
在运行时使用有效的 DateTime 填充参数。 我认为这可能与 Date 是保留字并需要反引号有关,但这是在线教程推荐的。
有什么想法吗?
【问题讨论】:
【参考方案1】:找到了!
由于某种原因而不是@,它需要?
所以工作代码是:
using (IDbConnection conn = DbHelper.GetConnection(DbConnString))
using (IDbCommand com = conn.CreateCommand())
com.CommandType = CommandType.Text;
com.CommandText =
String.Format(
"INSERT INTO 0 (`Date`, User, Type, `Comment`) VALUES (?Date, ?User, ?Type, ?Comment);",
TableName);
conn.Open();
var parameterDate = com.CreateParameter();
parameterDate.ParameterName = "?Date";
parameterDate.Value = entry.Date;
parameterDate.DbType = DbType.DateTime;
com.Parameters.Add(parameterDate);
var parameterUser = com.CreateParameter();
parameterUser.ParameterName = "?User";
parameterUser.Value = entry.User;
parameterUser.DbType = DbType.String;
com.Parameters.Add(parameterUser);
var parameterLogType = com.CreateParameter();
parameterLogType.ParameterName = "?Type";
parameterLogType.Value = entry.Type;
parameterLogType.DbType = DbType.Int32;
com.Parameters.Add(parameterLogType);
var parameterComment = com.CreateParameter();
parameterComment.ParameterName = "?Comment";
parameterComment.Value = entry.Comment;
parameterComment.DbType = DbType.String;
com.Parameters.Add(parameterComment);
com.ExecuteNonQuery();
【讨论】:
以上是关于将参数传递给 mySQL 数据库的 IdbCommand的主要内容,如果未能解决你的问题,请参考以下文章