将参数传递给IdbCommand for mySQL数据库

时间:2013-04-10 09:55:25

标签: mysql sql-insert idbconnection idbcommand

我正在尝试使用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,消息“Column'Date'不能为null”。

我所有的选择工作正常,只是这个插件有问题,我看不出它有明显的问题。

在运行时期间,参数将填充有效的DateTime。 我认为这可能与Date是一个保留字并且需要反引号这一事实有关,但这就是在线教程推荐的内容。

有什么想法吗?

1 个答案:

答案 0 :(得分: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();

        }