杭州网站建设交易,网站建设维护预算,网络营销促销方案,广告设计网站免费话说这Access数据库确实是有点年代了#xff0c;前面在深圳的一家放射医疗公司#xff0c;数据库用的Access#xff0c;后面在我的建议下#xff0c;换成了SQLite。用SQLite多舒服#xff0c;不用装Runtime#xff0c;还可以用EF。Access得装Runtime#xff0c;也用不了…话说这Access数据库确实是有点年代了前面在深圳的一家放射医疗公司数据库用的Access后面在我的建议下换成了SQLite。用SQLite多舒服不用装Runtime还可以用EF。Access得装Runtime也用不了EF。
回到长沙后找了一家工业仪器的公司发现也是用的Access数据库。 结果模糊查询 的时候发现不对劲这里总结几点C#在使用Access数据库时可能会遇到的问题 1、连接字符串 Access 2007 (文件后缀为.accdb)
没有密码的情况
Provider Microsoft.Ace.OleDb.12.0;Data Source{0};Persist Security InfoFalse; 有密码的情况
Provider Microsoft.Ace.OleDb.12.0;Data Source{0};Jet OleDb:DataBase Password{1}; 说明实际使用时用string.Format()函数将{0}替换成数据库路径{1}替换成密码即可
实际如下
Provider Microsoft.Ace.OleDb.12.0;Data SourceD:\test.accdb;Jet OleDb:DataBase Password123; Access 2003 (文件后缀为.mdb)
将Provider替换为Microsoft.Jet.OleDb.4.0即可如下
ProviderMicrosoft.Jet.OleDb.4.0;Data SourceD:\test.accdb;Jet OleDb:DataBase Password123; 2、不使用OleDbParameter时日期需要使用##包起来
有时候可能查询的语句比较简单就不想使用参数的形式的直接去拼SQL语句如果判断的条件是日期就要用##将日期包起来不然会报错如下
var sql Select * From Test Where Date BETWEEN #2021/03/13# AND #2021/03/14#; 使用了参数就可以不用带#。如下 var sql Select * From Test Where Date BETWEEN #StartDate# AND #EndDate#;System.Data.OleDb.OleDbParameter[] parameters new System.Data.OleDb.OleDbParameter[]{new System.Data.OleDb.OleDbParameter(StartDate,2021/03/13),new System.Data.OleDb.OleDbParameter(EndDate,2021/03/14)}; 3、使用OleDbParameter时日期需要传字符串
上面已经使用过参数了这里需要注意的时不能直接传DateTime类型而是需要传入字符串不然会报错。这次就是在公司遇到这个问题调试了好久因为太久没用Access不记得了。 4、在Access里执行查询时通配符使用* ,在C#中使用%
例如在Access中直接执行模糊查询语句查询包含z的姓名
Select * from Test Where Name Like *z*; 在C#中需要将*替换成%如下
var sql Select * from Test Where Name Like %z%; 5、使用Where false可以查询表结构
var sql Select * from Test Where false;
这操作我以前还不知道试了下SQL Server是不支持这操作的。 6、查询语句包含单引号 时需要用两个单引号
如
Select * from xx where Des whats
要写成
Select * from xx where Des whats 7、判断表是否存在
调用OleDbConnection的GetOleDbSchemaTable函数如下
tableName就是要查询的表名 OleDbConnection con new OleDbConnection(ProviderMicrosoft.Jet.OLEDB.4.0; Data Sourcea.mdb);con.Open();var dt con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, tableName, TABLE });
GetOleDbSchemaTable会返回一个数据源架构信息的DataTable再判断DataTable的行数是否大于0即可判断指定的表是否存在 if(dt.Rows.Count 0){Console.WriteLine(Exist) }else{Console.WriteLine(Not exist) } 通过这种方式也可以查询某个表是否存在某一列
tableName是要查询的表名columnName是要查询的列名 con.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, new object[] { null, null, tableName, columnName }); 到新公司也没写啥项目目前就遇到这几个问题吧做个总结。