插入强制转换数据和空字段 C# 时出错

本文关键字:字段 出错 转换 数据 插入 | 更新日期: 2023-09-27 18:37:21

我正在使用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)";

该表的定义如下(列 = 字段类型):

  • Codigo = 文本
  • 数据赛达(又名 @data)= 日期/小时
  • Entidade = 文本
  • 数据 Ent = 数据/小时
  • GT Ent = 文本
  • Estado = 文本
  • GT 赛达 = 文本
  • 天文台 = 文本
  • 请购单 = 编号
  • 证书 = 文本
  • 结果 = 文本
  • 选择=是/否
  • Tipo int = 文本
首先,我

收到一个错误,说"条件表达式中的数据类型不匹配",然后我查找了日期的 Cast 并这样放置它,现在它给了我一个错误,说"语法错误(缺少运算符)在查询 CAST(@data AS DATETIME)的表达式中

"

请帮忙。

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

插入强制转换数据和空字段 C# 时出错

看到这个...

enter code here
如果日期为空,

则为日期时间变量分配空值使用 dbnull.value

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