6

私はデータベースとしてMS Accessファイルを使用してVisual Studio 2012に取り組んでおり、この挿入で多くの問題を抱えています:

cmd.Parameters.Add(new OleDbParameter("@codigo", cal.CodEtiq)); // Value = int
cmd.Parameters.Add(new OleDbParameter("@data", cal.Data.ToString("yyyy-MM-dd hh:mm"))); //Value = 2013-10-29 00:00
cmd.Parameters.Add(new OleDbParameter("@entidade", cal.EntidadeCal)); // Value = string
cmd.Parameters.Add(new OleDbParameter("@observacao", cal.Observacao)); // Value = string
cmd.Parameters.Add(new OleDbParameter("@certificado", cal.Certificado)); // Value = string
cmd.Parameters.Add(new OleDbParameter("@resultado", cal.Resultado)); // Value = string
cmd.Parameters.Add(new OleDbParameter("@selecionar", cal.Selecionar));// Value = int
cmd.Parameters.Add(new OleDbParameter("@null", DBNull.Value));

cmd.CommandText = "INSERT INTO [Movimento Ferramentas] VALUES (@codigo, CAST(@data AS DATETIME), @entidade, @null, @null, 'Calibração', @null, @observacao, @null, @certificado, @resultado, @selecionar, @null)";

テーブルは次のように定義されます ( column = fieldtype):

  • Codigo = テキスト
  • データ サイダ (別名 @data) = 日付/時間
  • Entidade = テキスト
  • Data Ent = データ/時間
  • GT Ent = テキスト
  • Estado = テキスト
  • GT サイダ = テキスト
  • observacaoes = テキスト
  • requisitante = 数
  • 証明書 = テキスト
  • 結果 = テキスト
  • 選択 = はい/いいえ
  • Tipo int = テキスト

最初に「基準式のデータ型が一致しません」というエラーが発生し、次に日付のキャストを調べてそのように入力すると、「構文エラー(演算子が見つかりません)のようなエラーが表示されますクエリの式 CAST(@data AS DATETIME)"

助けてください。

更新: @Ralph で提案されているように、実際には、 「@null」の DBNull.Value使用する代わりに、すべての null を null として配置する必要がありました。だから、問題は解決しました ありがとうございました。

4

1 に答える 1

0

これを見て...

enter code here

日付が null の場合、dbnull.value を使用して datetime 変数に null を割り当てます

 if (@data== null)
 {
    new OleDbParameter("@Dt", SqlDbType.DateTime).Value =DBNull.Value;
 }
else
{
    new OleDbParameter(("@Dt", SqlDbType.DateTime).Value = @data;
}
于 2013-10-31T12:04:42.397 に答える