这几天一直在学习ADO.NET的一些知识,现对ADO.NET数据库访问做个小结,以便和大家交流学习.
若要创建 SqlDataReader,必须调用 SqlCommand 对象的 ExecuteReader方法,而不要直接使用构造函数。并且,SqlDataReader只有在保持数据库连接的状态下(SqlConnection对象显示的执行Open())才能从数据库中读取数据。
下面就举一个获取Album表所有专辑的名称信息的例子来说明这些对象的具体应用。
一般我们将对SQL Server数据库中某一张表的访问和操作的代码放在一个cs文件中,也即放在同一个类中。
首先我们在这个ADO.NET数据访问类里面声明我们来使用的几个对象的引用变量。注意这里仅仅是声明,并没有进行实例化。
private SqlConnection sqlconn;
private SqlCommand sqlcmd;
private SqlDataReader sqlreader;
/// <summary>
/// 获取专辑表中的所有专辑名
/// </summary>
public void GetAlbum()
{
string sql = "Select title from album";
sqlconn = new SqlConnection();
sqlconn.ConnectionString = ConfigurationManager.ConnectionStrings["Mu"].ConnectionString;
sqlcmd = new SqlCommand();
sqlcmd.Connection = sqlconn;
sqlcmd.CommandText = sql;
try
{
sqlcmd.Connection.Open();
sqlreader = sqlcmd.ExecuteReader();
//SqlDataReader.HasRows属性
//获取一个值,该值指示SqlDataReader是否包含一行或多行if (sqlreader.HasRows)
{//SqlDataReader的Read()一次只向前读一条记录
while (sqlreader.Read())
{
Console.WriteLine("专辑名称" + sqlreader["title"].ToString());
}
}
else
{
Console.WriteLine("没有检索到专辑名称信息!");
}
}
catch (SqlException exp)
{
Console.WriteLine("数据库未连接上或者读取的数据行已锁定,请确认已连接上sql server数据库或读取的数据行未加锁!具体信息如下:{0}",exp.Message);
}
finally
{
sqlcmd.Connection.Close();
}
}
而在VS2008下面,为了提高开发效率,已经把dataset对象做成了一个控件,我们只要拖拽控件,图形化的进行设置,只要在Main()里面写少量的代码,就可以实现了,大大减少了代码的编写量!
获取专辑的详细信息只需要在Main()中添加如下的代码:
albumTableAdapter adapter = new albumTableAdapter();
Mu.albumDataTable datatable = adapter.GetAlbum();
if (datatable.Rows.Count == 0)
{
Console.WriteLine("没有找到查询结果!");
}
else
{
Mu.albumRow dataRow = datatable[0];
try
{
Console.WriteLine(string.Format("专辑编号:{0}\n专辑名称:{1}\n歌手名:{2}\n价格:{3}\n所属标签:{4}\n发布日期:{5}\n排名:{6}", dataRow.asin, dataRow.title, dataRow.artist, dataRow.price, dataRow.rdate, dataRow.label, dataRow.rank));
}
catch (Exception exp)
{
Console.WriteLine(exp.Message);
}
}