去年下半年用VB6弄了簡單的串口通信,現在看過去彷彿動物進化史..
年初開始每月交報表,手算個破錶耗掉兩三個鍾,交上去要審覈再算一遍。去尼瑪的時間!
爲效率,人士推薦用了WPF。鼓搗了倆月,現在用上數據庫。
接下來爲c#簡單讀取mdb數據的操作。
1、連接數據庫
引用:
using System.Data;
using System.Data.OleDb;
建立連接:
注意OleDbConnection();括號裏的轉義字符串,若直接放在括號裏,字符串前要加個“@”。
mdb文件路徑,這裏還是bin文件夾下
string ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=../MDB文件名.mdb"
OleDbConnection myconnection = new OleDbConnection(ConnectionString ); //建立數據庫連接
若要用戶名和密碼:
User ID=MyUserName; Password=MyPassword;
用OleDbCommand類來執行SQL語句:
OleDbCommand cmd = myconnection.CreateCommand();
cmd.CommandText = "select * from 表名"; //mdb文件裏的表名
myconnection.Open(); //打開數據庫連接
2、用OleDbDataReader讀取mdb文件裏的某個數據/某列數據
先看錶:mdb,行號/列號都從0開始。第0列“ID”欄爲默認
OleDbDataReader odrReader = cmd.ExecuteReader();
①ExecuteReader方法存在的目的: 儘可能快的對數據庫進行查詢並得到結果
②ExecuteReader:返回一個DataReader對象,如果在SqlCommand對象中調用,則返回SqlDataReader;如果在OledbCommand對象中調用,返回的是OledbDataReader,可以調用DataReader的方法和屬性迭代處理結果集。
讀取某列數據:(轉載)
string a = "";
while (odrReader.Read()) //用Read讀取數據
{
a += odrReader.GetName(0).ToString(); //.GetName(int index):獲取指定列的名稱
a += odrReader.GetInt32(0).ToString(); //.GetInt32(int index):獲取指定列的32位有符號整型值
a += "\t"; //換到下一個TAB位置
a += odrReader.GetString(1); //.GetString(int index):獲取指定列的字符串
a += "\t";
a += odrReader.GetString(2);
a += "\t";
a += "\n"; //換行
}
odrReader.Close(); //關閉DataReader
textBlock1.Text = a; //讀取的數據載入textBlock1
這裏讀取了前3列數據。
OleDbDataReader.Read();
初始指針指向第一條數據之前,每調用一次reader,指針就下移一條,只要沒有移到最後一條之後,就返回true。
msdn說明:
使 OleDbDataReader 前進到下一條記錄,如果存在多個行,則爲 true;否則爲 false。
OleDbDataReader 的默認位置在第一條記錄前面。因此,必須調用 Read 來開始訪問任何數據。
在使用 OleDbDataReader 時,關聯的 OleDbConnection 正忙於爲其服務,直到調用 Close 爲止。
讀取表中某行某列的數據:轉載一個object
static object GetValue(OleDbDataReader reader, int row, int col)
//傳入前面新建的DataReader
//行號row,列號col
{
int i = 0;
object value = null;
while (reader.Read())
{
if (i == row)
{
value = reader[col];
break;
}
i++;
}
reader.Close(); //每次讀取後一定要關閉Reader
return value;
}
while (reader.Read()){}
每執行一次,相當於對該數據表進行一次掃描。
掃描到某個數據,接着break:
尚未掃描到最後一條數據,reader.Read()還爲true,多次調用GetValue會導致掃描不到前面的數據(表述正確否?),所以要關閉reader.Close()。
注意:繼續調用GetValue,即關閉reader之後,要重載ExecuteReader。
爲圖方便,在事件中直接多次調用GetValue,把ExecuteReader扔進去:
static object GetValue( OleDbCommand command, int row, string col)
{
OleDbDataReader Reader = command.ExecuteReader(); //Reader在這裏
object value = null;
int i = 0;
while (Reader.Read())
{
if (i == row)
{
value = Reader[col];
break;
}
i++;
}
Reader.Close();
return value;
}
定義reg用於操作,注意類型轉換:
string s = (string)GetValue(odrReader, 1, 2); //原
string ss = (string)GetValue(cmd, 1, 2); //第二種
最後要關閉數據庫連接:
myconnection.Close(); //每次操作完畢,必須要關閉連接