2013-04-10 79 views
0

我正在尝试使用IdbCommand来执行相对简单的操作来执行插入查询。将参数传递给用于mySQL数据库的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(); 

     }