Access 使用總結一篇
來源:程序員人生 發布時間:2013-12-07 12:45:55 閱讀次數:2856次
如何使用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是
如果內部元素溢出去了
和相鄰元素重合
那么被覆蓋的還是內部元素
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈