王朝网络
分享
 
 
 

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

王朝c#·作者佚名  2006-01-30
宽屏版  字体: |||超大  

前面的文章地址:

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表没有用到,这个表是用来保存登陆信息的,你可以自己为这个程序做一个登陆提示。

整个工程代码下载:点击下载

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有