Access 使用總結(jié)一篇
來源:程序員人生 發(fā)布時間:2013-12-07 12:45:55 閱讀次數(shù):2843次
如何使用Access 兩年前用過一點Access
感覺它小問題很多
就沒有再用
這次的程序是放在千兆寬網(wǎng)的虛擬主機上
這個虛擬主機不支持Sqlite
讀取數(shù)據(jù)的時候是好的
只要往數(shù)據(jù)庫里邊寫東西
就會報錯
Some Disk I/O Error Occured
很神奇
換了一個虛擬主機試試
沒有問題
說明不是我程序的問題
后來只能換成Access
用ADO
NET讀取數(shù)據(jù)庫其實都差不多
主要就是一個連接字串的問題
還有就是一些數(shù)據(jù)庫差異要注意
數(shù)據(jù)庫連接串
<add name=
ConnectionString
connectionString=
data source=|DataDirectory|we
mdb;Provider=Microsoft
Jet
OLEDB
/> 連接串很簡單
只需要指定DataSource就可以
這里的|DataDirectory|是指的App_Data目錄
的這種方式可以使我們很方便的用相對路徑來指定數(shù)據(jù)庫文件的位置
這里的Provider采用Oledb驅(qū)動
使用 在程序中使用是很簡單的
只是把Connection
Command之前的前綴換掉就可以了
舉一個例子:
復(fù)制代碼 代碼如下:
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;
}
}
當(dāng)然還要添加using
using System
Data
OleDb;
using System
Data;ADO
NET的處理方式都是很類似的
事實上
ADO
NET有一套以Db為前綴的Connection
Command等類
這些具體的類都是繼承自DbConnection
所以看起來都是一樣的
差異
上面提到
Access是很詭異的
以下列舉一些我遇到的
user 是關(guān)鍵字
如果有表名或者列名是user而沒有加中括號
是會出錯的
當(dāng)然
一致地在所有的表名和列名外加中括號是一個良好的編程習(xí)慣
直接插DateTime型的數(shù)據(jù)是會報錯的
即使數(shù)據(jù)庫里的字段類型確實是Date
插入的方式是把C#的DateTime型ToString()過后再插入
沒有bool型
或者bit型
叫yesno……
一個命令里邊不支持多條sql
這個限制也很討厭
每次執(zhí)行一個command的時候里面只能包含一條sql
非常不方便
即使是小巧如Sqlite的數(shù)據(jù)庫也沒有這個限制
參數(shù)順序的問題
聲明的參數(shù)順序必須要和你往command里邊添加參數(shù)的聲明一致
否則很有可能什么錯也不報
就是不影響結(jié)果(update的時候
其他時候沒試過)
Access真是極品數(shù)據(jù)庫啊!!例如
復(fù)制代碼 代碼如下:
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元素內(nèi)部的HTML元素的z
index只是相對于位于同一層次的元素的z
index
對其父元素之外的元素的z
index沒有影響
也就是說如果父元素的z
index很小
比如是
內(nèi)部元素的z
index很高
父元素相鄰的元素的z
index是
如果內(nèi)部元素溢出去了
和相鄰元素重合
那么被覆蓋的還是內(nèi)部元素
生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機掃描二維碼進(jìn)行捐贈