您的位置:首页 > 其它

ADO.NET详细研究(四)--实例演示DataReader基本操作

2004-07-29 18:36 891 查看
标题 ADO.NET详细研究(四)--实例演示DataReader基本操作 bineon [原作]
关键字ADO.NET详细研究(四)--实例演示DataReader基本操作
出处
前面的文章地址:[/b] http://dev.csdn.net/develop/article/26/26246.shtm[/b] http://dev.csdn.net/develop/article/26/26480.shtm[/b] http://dev.csdn.net/develop/article/26/26481.shtm[/b] 这次我们用实例演示DataReader的基本应用,当然同时包含Command以及Connection的基本操作。通过这个实例的学习我们能处理一般的数据库系统了。[/b] WinForm[/b]的个人通讯录[/b](vs.net2003 + sql server2000)[/b] 1. 建立数据库(前面的文章已经讨论) 2. 启动Vs.net建立contract工程并设计如下界面:

其中重要控件属性列表如下:
控件类型
TextName其他
ListViewlistView显示模式为details,FullRowSelect为ture
Button确定btnOK默认enable为false
Button重填btnRE默认enable为false
Button添加联系人信息btnAdd
Button修改选中联系人信息btnEdit
Button删除选中联系人信息btnDel
TextBoxtxtName默认enable为false
TextBoxtxtPhone默认enable为false
TextBoxtxtAddress默认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表没有用到,这个表是用来保存登陆信息的,你可以自己为这个程序做一个登陆提示。 整个工程代码下载:点击下载
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: