以下是网学网为您推荐的ASP.net-ADO.NET详细研究(3),希望本篇文章对您学习有所帮助。
这次我们用实例演示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 _