Access 使用总结一篇
来源:程序员人生 发布时间:2013-12-07 12:45:55 阅读次数:2684次
如何使用Access 两年前用过一点Access
感觉它小问题很多
就没有再用
这次的程序是放在千兆宽网的虚拟主机上
这个虚拟主机不支持Sqlite
读取数据的时候是好的
只要往数据库里边写东西
就会报错
Some Disk I/O Error Occured
很神奇
换了一个虚拟主机试试
没有问题
说明不是我程序的问题
后来只能换成Access
用ADO
NET读取数据库其实都差不多
主要就是一个连接字串的问题
还有就是一些数据库差异要注意
数据库连接串
<add name=
ConnectionString
connectionString=
data source=|DataDirectory|we
mdb;Provider=Microsoft
Jet
OLEDB
/> 连接串很简单
只需要指定DataSource就可以
这里的|DataDirectory|是指的App_Data目录
的这种方式可以使我们很方便的用相对路径来指定数据库文件的位置
这里的Provider采用Oledb驱动
使用 在程序中使用是很简单的
只是把Connection
Command之前的前缀换掉就可以了
举一个例子:
复制代码 代码如下:
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;
}
}
当然还要添加using
using System
Data
OleDb;
using System
Data;ADO
NET的处理方式都是很类似的
事实上
ADO
NET有一套以Db为前缀的Connection
Command等类
这些具体的类都是继承自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元素的z
index只是相对于位于同一层次的元素的z
index
对其父元素之外的元素的z
index没有影响
也就是说如果父元素的z
index很小
比如是
内部元素的z
index很高
父元素相邻的元素的z
index是
如果内部元素溢出去了
和相邻元素重合
那么被覆盖的还是内部元素
生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠