将参数传递给 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的主要内容,如果未能解决你的问题,请参考以下文章

如何将参数传递给节点js中的sql查询

如何将参数传递给具有联合的mysql存储过程

将参数传递给 JDBC PreparedStatement

将多个参数传递给 Web API GET 方法

mysql 存储过程 数据库表名字段作为参数传递给存储过程的方法

使用ajax将参数传递给Controller