2013-04-10 2 views
0

비교적 간단한 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(); 

하지만 메시지 "열 '날짜'null 일 수 없습니다"와 MySqlException 점점 계속.

내 모든 선택 작품 괜찮아요, 그냥 문제 가이 삽입하고 그걸로 명백한 문제를 볼 수 없습니다.

매개 변수는 런타임 중에 유효한 DateTime으로 채워집니다. Date가 예약어이고 backquotes가 필요하다는 사실과 관련이 있다고 생각했지만 온라인 자습서에서 권장하는 내용입니다.

아이디어가 있으십니까?

답변

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(); 

     }