在C#中向access数据库中插入数据怎么出错了

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在C#中向access数据库中插入数据怎么出错了相关的知识,希望对你有一定的参考价值。

string sqlStr = string.format("insert into 表名 (列名,列名,列名) values ('0','1',2)",字符串,字符串,数字); 这个SQL语句怎么出错了呢? 我用的是ACCESS数据库。
具体SQL语句是这样的。string sqlStr = string.format("insert into shiyong (LoginId,PassWord,static) values ('0','1',2)",id,password,sta); 应该没有关键词啊! 我就是找不出错误! 我已经把所有的字段和表名都加了[] ,但还是说我的错误 楼下的几位的方法我都已经试过了。但就是报错!

把错误提示信息贴上啊。
如果你的列名和表名没有拼错,而且都加上[]号,仍旧出错,最大的可能是权限错误,就是数据库没有写权限,右击数据库文件,选择属性,点“安全”,然后点“添加”按钮,输入“everyone”,选择下面的“完全控制”,然后确定。
参考技术A string sqlstr="Insert into 表名 (列名,列名,列名)values('"+textBox.Text.trim()+"','"..."','"...."')"; 参考技术B 把表名和列名都加上[]试试,可能是表名或者列名使用了access的关键词 参考技术C 你的表字段可能使用了数据库的保留字段,
你把PassWord改下名
参考技术D 可能语法不太对 第5个回答  2009-02-13 很好很强大

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

【中文标题】插入 Cast 数据和空字段 C# 时出错【英文标题】:Error Inserting Cast data and null fields C# 【发布时间】:2013-11-08 13:08:27 【问题描述】:

我正在使用 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 = 文本 数据条目 = 数据/小时 GT Ent = 文本 Estado = 文本 GT saida = 文本 观察=文本 requisitante = 号码 证书 = 文本 结果 = 文本 选择 = 是/否 提示 int = 文本

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

请帮忙。

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

【问题讨论】:

我会说问题出在第二个参数上,如果数据库列定义为日期时间,请不要将其转换为字符串。此外,您可以使用 OleDbParameter 的其他构造函数之一,以便您可以指定参数的类型 - 检查 msdn.microsoft.com/en-us/library/… 没有 .ToString("yyyy-MM-dd hh:mm") 和 Cast 我仍然会收到“标准表达式中的数据类型不匹配”错误 您是否按照我的建议尝试过使用其他 OleDbParameter 构造函数重载之一?您可以指定参数的类型,这应该可以解决问题。检查我在之前评论中添加的链接。 我检查过了。问题是其他构造函数变得过于复杂。正如你所说的这种情况,我只需要字符串、类型和对象本身。最接近的是“OleDbParameter(String, OleDbType, Int32, ParameterDirection, Boolean, Byte, Byte, String, DataRowVersion, Object)”。 参数集合有一个简单的 Add(name, type) 重载。但是 OleDB 对命名参数一无所知。您需要按照它们在 sql 字符串中定义的顺序添加它们。而且您也不能重用参数。您必须像在 sql 中一样经常添加@@null。为什么不直接写 null 而不是 @@null 呢? 【参考方案1】:

看到这个...

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#中向access数据库中插入数据怎么出错了的主要内容,如果未能解决你的问题,请参考以下文章

尝试使用 C# 将数据插入 MS Access 数据库,但插入命令不起作用

使用C#向ACCESS中插入数据(仅供参考)

ACCESS数据库插入数据不成功

请问怎么在VS2008中向数据库中插入图片,我主要是想做个个人资料页面,设置一个头像,主要是ASPX和它的后

尝试使用“插入”ms-access 数据库时出错

在 Visual C# 中修复我的 MS Access 数据库时出错