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

时间:2013-10-29 11:38:09

标签: c# .net sql ado.net oledb

我正在使用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 = text
  • 数据表示(又名@data)=日期/小时
  • Entidade = text
  • 数据Ent =数据/小时
  • GT Ent = text
  • Estado = text
  • GT saida = text
  • observacaoes = text
  • requisitante = number
  • certificado = text
  • resultado = text
  • selecionar =是/否
  • tipo int = text

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

的表达式中

请帮忙。

更新:正如@Ralph所建议的,我实际上只需将所有空值都设置为 nulls ,而不是使用“@ null”,DBNull.Value 。所以,解决问题谢谢大家。

1 个答案:

答案 0 :(得分:0)

看到这个......

enter code here

如果date为null,则为datetime变量赋值null 使用dbnull.value

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