我在 Visual Studio 2012 上工作,使用 MS Access 文件作为数据库,但在插入时遇到了很多问题:
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 = 文本
- Data Ent = 数据/小时
- GT Ent = 文本
- Estado = 文本
- GT saida = 文本
- observacaoes = 文本
- requisitante = 数量
- 证书 = 文本
- resultado = 文本
- selecionar = 是/否
- tipo int = 文本
首先我收到一条错误消息“标准表达式中的数据类型不匹配”,然后我查找了 Cast 中的日期并像这样输入,现在它给我一个错误消息,说“语法错误(缺少运算符) ) 在查询表达式中 CAST(@data AS DATETIME)"
请帮忙。
更新:正如@Ralph 所建议的,我实际上只需要将所有空值作为nulls 而不是使用“@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;
}
关于c# - 插入 Cast 数据和空字段 C# 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19657196/