連接數據庫,OleDbDataReader讀取mdb的數據

去年下半年用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”欄爲默認
表1


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

從OleDbDataReader中獲取指定行、指定列的值

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();   //每次操作完畢,必須要關閉連接
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章