插入Cast数据和空字段C#时出错

Mic*_*cio 5 .net c# sql oledb ado.net

我正在使用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)";
Run Code Online (Sandbox Code Playgroud)

该表定义如下(column = fieldtype):

  • Codigo =文字
  • 数据表示aa(又名@data)=日期/小时
  • Entidade =文字
  • 数据Ent =数据/小时
  • GT Ent =文字
  • Estado =文字
  • GT说aa =文字
  • observacaoes =文字
  • requisitante =数字
  • certificado =文本
  • resultado =文字
  • selecionar =是/否
  • tipo int = text

首先我得到一个错误,说"标准表达式中的数据类型不匹配",然后我查看了Cast的日期,并把它放在那里,现在它给了我一个错误,上面写着"语法错误(操作员缺失)"查询表达式CAST(@data AS DATETIME)"

请帮忙.

更新:正如@Ralph所建议的那样,我实际上只需将所有空值作为空值而不是使用"@null",DBNull.Value.所以,解决问题谢谢大家.

小智 0

看到这个...

enter code here
Run Code Online (Sandbox Code Playgroud)

如果日期为 null,则使用 dbnull.value为日期时间变量分配 null

 if (@data== null)
 {
    new OleDbParameter("@Dt", SqlDbType.DateTime).Value =DBNull.Value;
 }
else
{
    new OleDbParameter(("@Dt", SqlDbType.DateTime).Value = @data;
}
Run Code Online (Sandbox Code Playgroud)