插入强制转换数据和空字段 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。所以,问题解决了 谢谢大家。
看到这个...
enter code here
如果日期为空,则为日期时间变量分配空值使用 dbnull.value
if (@data== null)
{
new OleDbParameter("@Dt", SqlDbType.DateTime).Value =DBNull.Value;
}
else
{
new OleDbParameter(("@Dt", SqlDbType.DateTime).Value = @data;
}