C#操作Access数据库的若干问题记录

最近做一个数据填报软件,用的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不是很熟悉,这两个问题卡住了两天,让这次经验教训变得非常深刻。



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要使用C#创建Access数据库,你需要遵循以下步骤: 1. 首先,确保你的计算机安装了Microsoft Access数据库软件。如果没有安装,你需要先下载并安装它。 2. 在C#中,你需要使用 `System.Data.OleDb` 命名空间来与Access数据库进行交互。因此,确保在代码文件的开头添加以下引用: ```csharp using System.Data.OleDb; ``` 3. 接下来,你可以通过使用 `OleDbConnection` 类来创建与Access数据库的连接。在连接字符串中指定数据库的路径和名称。 ```csharp string connectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\路径\数据库名称.mdb"; OleDbConnection connection = new OleDbConnection(connectionString); ``` 请注意,这里的连接字符串中的 `Provider` 属性用于指定Access数据库版本。根据你所使用的版本,可能需要不同的提供程序。 4. 现在,你可以打开数据库连接,并执行创建数据库操作。 ```csharp connection.Open(); // 创建数据库的SQL查询语句 string createDatabaseQuery = "CREATE DATABASE YourDatabaseName"; OleDbCommand command = new OleDbCommand(createDatabaseQuery, connection); command.ExecuteNonQuery(); connection.Close(); ``` 以上代码段中的 `YourDatabaseName` 是你想要为数据库指定的名称。 请注意,以上代码只是创建数据库的示例。你还可以执行其他SQL查询语句以创建表格、插入数据等操作。 这是一个基本的创建Access数据库的示例。你可以根据你的需求进行适当的调整和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小鹰信息技术服务部

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值