国内最全IT社区平台 联系我们 | 收藏本站
华晨云阿里云优惠2
您当前位置:首页 > 数据库 > access > Access 使用总结一篇

Access 使用总结一篇

来源:程序员人生   发布时间:2013-12-07 12:45:55 阅读次数:2562次
如何使用Access
两年前用过一点Access感觉它小问题很多就没有再用这次的程序是放在千兆宽网的虚拟主机上这个虚拟主机不支持Sqlite读取数据的时候是好的只要往数据库里边写东西就会报错Some Disk I/O Error Occured很神奇换了一个虚拟主机试试没有问题说明不是我程序的问题后来只能换成Access用ADONET读取数据库其实都差不多主要就是一个连接字串的问题还有就是一些数据库差异要注意

数据库连接串

<add name=ConnectionString connectionString=data source=|DataDirectory|wemdb;Provider=MicrosoftJetOLEDB /> 连接串很简单只需要指定DataSource就可以这里的|DataDirectory|是指的App_Data目录的这种方式可以使我们很方便的用相对路径来指定数据库文件的位置这里的Provider采用Oledb驱动

使用

在程序中使用是很简单的只是把ConnectionCommand之前的前缀换掉就可以了举一个例子:

  复制代码 代码如下:

  public DataTable GetAll(string numint minint startRecord int pageSize)
{
string sql = stringFormat(select Num minPrice isUsed from PhoneNumber where Num like {}% and isUsed= num);
if (min != )
{
sql += and minPrice=@p;
}
using (OleDbConnection conn = new OleDbConnection(SqlHelperConnStr))
{
connOpen();
OleDbCommand cmd = connCreateCommand();
cmdCommandText = sql;
if (min != )
cmdParametersAddWithValue(p min);
OleDbDataAdapter adp = new OleDbDataAdapter(cmd);
DataTable table = new DataTable();
adpFill(startRecordpageSizetable);
return table;
}
}


当然还要添加usingusing SystemDataOleDb;
using SystemData;ADONET的处理方式都是很类似的事实上ADONET有一套以Db为前缀的ConnectionCommand等类这些具体的类都是继承自DbConnection所以看起来都是一样的

差异

上面提到Access是很诡异的以下列举一些我遇到的

user 是关键字如果有表名或者列名是user而没有加中括号是会出错的当然一致地在所有的表名和列名外加中括号是一个良好的编程习惯

直接插DateTime型的数据是会报错的即使数据库里的字段类型确实是Date插入的方式是把C#的DateTime型ToString()过后再插入

没有bool型或者bit型叫yesno……

一个命令里边不支持多条sql这个限制也很讨厌每次执行一个command的时候里面只能包含一条sql非常不方便即使是小巧如Sqlite的数据库也没有这个限制

参数顺序的问题 声明的参数顺序必须要和你往command里边添加参数的声明一致否则很有可能什么错也不报就是不影响结果(update的时候其他时候没试过) Access真是极品数据库啊!!例如

  复制代码 代码如下:

  string sql = update [user] set WorkField=@p Company=@pIC=@pContact=@pPhone=@pMobile=@pAddress=@pEmail=@pIntroduction=@p
+ where username=@p;
cmdCommandText = sql;
cmdParametersAddWithValue(p entityWorkField);
cmdParametersAddWithValue(p entityCompany);
cmdParametersAddWithValue(p entityIC);
cmdParametersAddWithValue(p entityContact);
cmdParametersAddWithValue(p entityPhone);
cmdParametersAddWithValue(p entityMobile);
cmdParametersAddWithValue(p);
cmdParametersAddWithValue(p stringIsNullOrEmpty(entityEmail)? :entityEmail);
cmdParametersAddWithValue(p stringIsNullOrEmpty(entityIntroduction)? :entityIntroduction);
cmdParametersAddWithValue(p entityUserName);
int i= cmdExecuteNonQuery();这样是可以的但是把

cmdParametersAddWithValue(p entityUserName);


提到前面去就不行了更新不了 幸好在csdn上搜到有人也问这个问题不然都不知道怎么搞

zindex的问题
包含在其他HTML元素内部的HTML元素的zindex只是相对于位于同一层次的元素的zindex对其父元素之外的元素的zindex没有影响也就是说如果父元素的zindex很小比如是内部元素的zindex很高父元素相邻的元素的zindex是如果内部元素溢出去了和相邻元素重合那么被覆盖的还是内部元素
生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠
程序员人生
------分隔线----------------------------
分享到:
------分隔线----------------------------
关闭
程序员人生