0

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

しかし、「列 'Date' を null にすることはできません」というメッセージが表示された MySqlException が引き続き発生します。

私の選択はすべて正常に機能します。問題があるのはこの挿入だけであり、明らかな問題は見られません。

パラメータには、実行時に有効な DateTime が入力されます。Date は予約語であり、逆引用符が必要であるという事実に関連しているのではないかと思いましたが、それはオンライン チュートリアルで推奨されていることです。

何か案は?

4

1 に答える 1

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

        }
于 2013-04-10T10:19:57.283 に答える