ADO.NET詳細研究(四)--執行個體示範DataReader基本操作

來源:互聯網
上載者:User
ado 前面的文章地址:

http://dev.csdn.net/develop/article/26/26246.shtm

http://dev.csdn.net/develop/article/26/26480.shtm

http://dev.csdn.net/develop/article/26/26481.shtm

這次我們用執行個體示範DataReader的基本應用,當然同時包含Command以及Connection的基本操作。通過這個執行個體的學習我們能處理一般的資料庫系統了。

WinForm的個人通訊錄(vs.net2003 + sql server2000)

1. 建立資料庫(前面的文章已經討論)

2. 啟動Vs.net建立contract工程並設計如下介面:




其中重要控制項屬性列表如下:

控制項類型
Text
Name
其他

ListView

listView
顯示模式為details,FullRowSelect為ture

Button
確定
btnOK
預設enable為false

Button
重填
btnRE
預設enable為false

Button
新增連絡人...資訊
btnAdd


Button
修改選中連絡人資訊
btnEdit


Button
刪除選中連絡人資訊
btnDel


TextBox

txtName
預設enable為false

TextBox

txtPhone
預設enable為false

TextBox

txtAddress
預設enable為false,Multiline為true



3. 編寫代碼:

首先我們在表單載入事件裡面添加liestView顯示資料事件

private void Form1_Load(object sender, System.EventArgs e)

{

getInfo();

}

在getInfo方法裡面我們必須把資料庫裡面的資訊讀取出來同時顯示到listView裡面。這時一個可行的辦法是使用DataReader直接讀取資料然後顯示。但是我這裡不想這樣做,我編寫一個專門的類contractDB來處理資料,這個類裡面有自己的一些方法,實現對資料庫的操作。

// class contractDB,封裝應用程式所有對資料庫的操作事件

using System;

using System.Data;

using System.Data.SqlClient;



namespace contract

{

/// <summary>

/// contractDB 的摘要說明。

/// </summary>

public class contractDB

{

string connStr = "Data Source = joycode;Initial Catalog = contract;user id = sa;password = 87345587";

//string sql;

//SqlCommand cmd;



public contractDB()

{

//

// TODO: 在此處添加建構函式邏輯

//

}



/// <summary>

/// 獲得所有連絡人資訊

/// </summary>

/// <returns>所有連絡人資訊</returns>

public SqlDataReader getReader()

{

string sql = "select Fid,Fname,Fphone,Faddress from friend";

SqlConnection conn = new SqlConnection(connStr);

conn.Open();

SqlCommand cmd = new SqlCommand(sql,conn);

SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);

return reader;

}

}

}

我的目的很明顯,我將調用getReader方法得到我須要的DataReader,因此在Form1裡面的getInfo方法代碼如下:

private void getInfo()

{

contractDB cdb = new contractDB();

try

{

SqlDataReader reader = cdb.getReader();

this.listView.Items.Clear();

while(reader.Read())

{

string[] subItems = new string[]

{

reader.GetInt32(0).ToString(),

reader.GetString(1),

reader.GetString(2),

reader.GetString(3)

};

this.listView.Items.Add(new ListViewItem(subItems));

}

reader.Close();

}

catch(Exception ex)

{

MessageBox.Show(ex.ToString());

}

}

上面的代碼很簡單,不做解釋,但是注意由於我們在資料訪問類沒有考慮異常,那麼我們在這裡必須處理可能出現的異常。

類似的我們在資料訪問類中添加另外的方法:新增連絡人...,刪除連絡人,修改資訊。整個類檔案如下:

using System;

using System.Data;

using System.Data.SqlClient;



namespace contract

{

/// <summary>

/// contractDB 的摘要說明。

/// </summary>

public class contractDB

{

string connStr = "Data Source = bineon;Initial Catalog = contract;user id = sa;password = 87345587";

//string sql;

//SqlCommand cmd;



public contractDB()

{

//

// TODO: 在此處添加建構函式邏輯

//

}



/// <summary>

/// 獲得所有連絡人資訊

/// </summary>

/// <returns>所有連絡人資訊</returns>

public SqlDataReader getReader()

{

string sql = "select Fid,Fname,Fphone,Faddress from friend";

SqlConnection conn = new SqlConnection(connStr);

conn.Open();

SqlCommand cmd = new SqlCommand(sql,conn);

SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);

return reader;

}



/// <summary>

/// 添加新連絡人

/// </summary>

/// <param name="_name">姓名</param>

/// <param name="_phone">電話</param>

/// <param name="_address">地址</param>

public void addInfo(string _name,string _phone,string _address)

{

//可以使用Command Parameter來構造sql語句以獲得更好的效率和更高的安全性

string sql = "insert into friend (Fname,Fphone,Faddress) values ('";

sql += _name + "','" + _phone + "','" + _address + "')";

SqlConnection conn = new SqlConnection(connStr);

SqlCommand cmd = new SqlCommand(sql,conn);

conn.Open();

cmd.ExecuteNonQuery();

conn.Close();

}



/// <summary>

/// 修改連絡人資訊

/// </summary>

/// <param name="_id">需要修改的連絡人的id</param>

/// <param name="_name"></param>

/// <param name="_phone"></param>

/// <param name="_address"></param>

public void changeInfo(int _id,string _name,string _phone,string _address)

{

string sql = "update friend set Fname = '" + _name + "',Fphone = '" + _phone + "',Faddress = '" + _address + "'";

SqlConnection conn = new SqlConnection(connStr);

SqlCommand cmd = new SqlCommand(sql,conn);

conn.Open();

cmd.ExecuteNonQuery();

conn.Close();

}



/// <summary>

/// 刪除指定fid的連絡人資訊

/// </summary>

/// <param name="infoID"></param>

public void deleteInfo(int infoID)

{

string sql = "delete friend where Fid = " + infoID;

SqlConnection conn = new SqlConnection(connStr);

conn.Open();

SqlCommand cmd = new SqlCommand(sql,conn);

cmd.ExecuteNonQuery();

conn.Close();

}

}

}

關於以上類代碼的說明:你可以自己寫一個基類,然後上面這個類繼承該基類,基類包含ExeNonQueryString等方法,這樣你就不必每個方法都寫建立串連等的代碼。另外上面的sql語句構造建議使用Command Parameter的方法,這樣效率以及安全性都比較高。

另外資料庫裡面的admin表沒有用到,這個表是用來儲存登陸資訊的,你可以自己為這個程式做一個登陸提示。

整個工程代碼下載:點擊下載



相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。