C#操作Access数据库的若干问题记录
2016-11-17 12:50
218 查看
最近做一个数据填报软件,用的C#,操作Access数据库的时候遇到了一些问题,走了很多弯路,记录如下:
1. 报错,提示INSERT INTO语法错误,然后用生成的sql语句放在Access 2010中测试,提示:
“”Microsoft Access 设置1字段为Null是因为类型转换失败,它未将0记录添加到表是因为键值冲突,没有添加0记录是因为锁定冲突,没有添加0记录是因为有效性规则冲突...”
其实,这个提示在本例中有一定的误导性,网上查,有不少说法是主键ID的问题,最后我试出来发现和主键问题,无关,其实是字段类型转换出错的问题:
表中有两个字段,abs1和abs2,设定为数字类型,但是赋值的时候因为忽略掉,所以就用了空白字符串"",所以数据库认为这个空白字符串无法转换成数字,就报错了,所以解决方法是把字段换成文本类型,或者这两个字段给个默认值0。
2. 上个问题是解决了,接着运行程序,继续报错,提示还是INSERT INTO 语法错误,这次还是把生成的SQL语句放在Access2010中测试,通过,没问题。这样,问题就比较清楚了,同样的SQL语句在Access2010中可以执行而在C#中无法执行,说明两者对语句的处理有着不同的机制,语句如下:
insert into t_detect (no, channel, item, ...) values ("NO1","X1","农药残留",...);
看似很正常的语句,语法上没有问题,结合网上查到的一些别人分享的信息,联想到了关键字冲突的问题,于是查了一下,这里的第一个字段是no,而“no”正是Access的关键字,而Access2010有这样的处理机制让语句通过,但C#没有,于是报错。
解决方法,要么是改字段名,要么是在语句中给字段名加中括号,修改如下:
/// <summary>
/// 构造SQL的各列名
/// </summary>
public string toSQLCols()
{
return
"[no], channel, item, ...";
}
再次测试,问题解决!
由于C#操作Access不是很熟悉,这两个问题卡住了两天,让这次经验教训变得非常深刻。
1. 报错,提示INSERT INTO语法错误,然后用生成的sql语句放在Access 2010中测试,提示:
“”Microsoft Access 设置1字段为Null是因为类型转换失败,它未将0记录添加到表是因为键值冲突,没有添加0记录是因为锁定冲突,没有添加0记录是因为有效性规则冲突...”
其实,这个提示在本例中有一定的误导性,网上查,有不少说法是主键ID的问题,最后我试出来发现和主键问题,无关,其实是字段类型转换出错的问题:
表中有两个字段,abs1和abs2,设定为数字类型,但是赋值的时候因为忽略掉,所以就用了空白字符串"",所以数据库认为这个空白字符串无法转换成数字,就报错了,所以解决方法是把字段换成文本类型,或者这两个字段给个默认值0。
2. 上个问题是解决了,接着运行程序,继续报错,提示还是INSERT INTO 语法错误,这次还是把生成的SQL语句放在Access2010中测试,通过,没问题。这样,问题就比较清楚了,同样的SQL语句在Access2010中可以执行而在C#中无法执行,说明两者对语句的处理有着不同的机制,语句如下:
insert into t_detect (no, channel, item, ...) values ("NO1","X1","农药残留",...);
看似很正常的语句,语法上没有问题,结合网上查到的一些别人分享的信息,联想到了关键字冲突的问题,于是查了一下,这里的第一个字段是no,而“no”正是Access的关键字,而Access2010有这样的处理机制让语句通过,但C#没有,于是报错。
解决方法,要么是改字段名,要么是在语句中给字段名加中括号,修改如下:
/// <summary>
/// 构造SQL的各列名
/// </summary>
public string toSQLCols()
{
return
"[no], channel, item, ...";
}
再次测试,问题解决!
由于C#操作Access不是很熟悉,这两个问题卡住了两天,让这次经验教训变得非常深刻。
相关文章推荐
- c#中使用多线程访问winform中控件的若干问题 解决线程间操作无效: 从不是创建控件的线程访问它
- 腾讯云图片鉴黄集成到C# SQL Server 怎么在分页获取数据的同时获取到总记录数 sqlserver 操作数据表语句模板 .NET MVC后台发送post请求 百度api查询多个地址的经纬度的问题 try{}里有一个 return 语句,那么紧跟在这个 try 后的 finally {}里的 code 会 不会被执行,什么时候被执行,在 return 前还是后? js获取某个日期
- 再发—关于添加记录时ACCESS数据库变成只读的问题!(根源)
- C#对XML操作:写入一笔XML记录(2)
- C#操作Access数据库的例子
- Firefox火狐下CSDN操作的若干小问题
- c#操作ACCESS数据库
- "BOF或EOF中有一个是真,或者当前的记录已被删除,所需的操作要求一个当前的记录"问题解决
- C# 操作ACCESS数据库
- 记录几个 c# 中遇到的问题
- 关于c#.Net操作Access数据库的类,支持事务处理
- C#的文件操作及中文乱码问题的解决
- 如何解决ADO.NET访问Access数据库出现"操作必须使用一个可更新的查询"的问题(非原创,摘自书中)
- C#操作ini文件的问题
- 今天在使用C#的ASP.NET给Access的数据库中添加新记录发现的问题
- 记录几个 c# 中遇到的问题
- C#对XML操作:写入一笔XML记录(1)
- 如何解决ADO.NET访问Access数据库出现"操作必须使用一个可更新的查询"的问题
- ACCESS数据库操作:重复记录仅显示其中一个,并显示多个字段
- 解决Access数据库中"操作必须使用一个可更新的查询"问题