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 = 文本
  • 数据 Ent = 数据/小时
  • GT Ent = 文本
  • Estado = 文本
  • GT saida = 文本
  • 观察=文本
  • 要求=数量
  • 证书=文本
  • 结果=文本
  • 选择=是/否
  • 提示 int = 文本

首先,我收到一条错误消息,说“标准表达式中的数据类型不匹配”,然后我查找了日期的演员表并这样写,现在它给了我一个错误,上面写着“语法错误(缺少运算符)”查询表达式 CAST(@data AS DATETIME)"

请帮忙。

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

4

1 回答 1

0

看到这个...

enter code here

如果 date 为 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 回答