ADO.NET技术注意点
ConnectionState枚举
作用:用来监测某个Connection对象当前的状态
using System.Data.SqlClient;
SqlConnection con = new SqlConnection();
private void Form1_Load(object sender, EventArgs e)
{
con.ConnectionString = "Server=127.0.0.1;DataBase=InLettDB;UID=sa;Pwd=123;";
}
/// <summary>
/// 来测试当前应用程序是否能够连接到数据库
/// </summary>
private void button1_Click(object sender, EventArgs e)
{
if (button1.Text=="打开服务器")
{
con.Open();
if (con.State == ConnectionState.Open)
{
MessageBox.Show("成功连接到服务器");
button1.Text = "关闭服务器";
}
}
else if (button1.Text== "关闭服务器")
{
con.Close();
if (con.State== ConnectionState.Closed)
{
MessageBox.Show("与服务器断开连接");
button1.Text = "打开服务器";
}
}
}
面试题
DataReader和DataAdapter两种方式获取Command命令执行的结果集的区别是什么。
总结:
相同:
-
都能够对Command命令的结果集数据进行读取
不同点:
-
DataReader对象对数据的读取速度快而且方便
DataAdapter方式具有强大的数据操作功能,对资源消耗较大
-
DataReader在使用时始终占用Connection,此时对Connection对象的任何操作都会引起DataReader出现异常,对数据在线操作数据库;DataAdapter则是将数据一次性加载到本地的缓存中,加载完成直接断开Connection,对数据进行在本地操作。
使用环境:
-
当需要操作非连接数据时,这时只需要将数据库中数据加载到当前应用程序客户端计算机,缓存加以使用,推荐用DataAdapter方式
-
当需要存储、传输、操作多个数据表时,并且表和表之间存在着数据关系时,推荐使用DataAdapter方式
-
需要对数据进行调度操作(例如:分页浏览数据、跳转到固定的记录时),推荐使用DataAdapter
-
当需要一次性读取数据到客户端而且没有更新删除操作时建议使用DataReader
-
需要遍历一个数据集,对数据每条记录进行只读取操作,建议使用DataReader对象
DataSet和DataTable
-
DataSet表示数据在内存中的缓存,DataTable表示数据在内存中数据的一张表
-
DataSet里面可以存放多张表数据,DataTable只能记录一张表数据
-
DataSet是DataTable类型的一个集合
数据库操作基本方法总结
-
创建Connection对象(连接字符串拼写)
-
确定SQL语句(INSERT、UPDATE、DELETE、SELECT)
-
创建Command对象
-
如果SQL语句查询结果是受影响行数-ExecuteNonQuery()
-
如果SQL语句查询结果是单一数据-ExecuteScalar();
-
如果SQL语句查询结果是一个/多个数据表
-
使用DataReader对象对数据进行逐行读取(要注意读完后关闭DataReader对象)
-
使用DataAdapter对象对数据进行适配暂存(结果是一张表使用DataTable容器,多张表使用DataSet容器)
-
-
-
关闭Connection
查询多张表的结果集
使用DataAdapter查询
#region//使用DataAdapter方式
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
DataSet set = new DataSet();
adapter.Fill(set);
if (button4.Text=="查课程")
{
button4.Text = "查老师";
textBox3.Text = "";
for (int i = 0; i < set.Tables[0].Rows.Count; i++)
{
textBox3.Text += set.Tables[0].Rows[i]["SUBID"].ToString() + set.Tables[0].Rows[i]["SUBName"].ToString()+"\r\n";
}
}
else if (button4.Text=="查老师")
{
button4.Text = "查课程";
textBox3.Text = "";
for (int i = 0; i < set.Tables[1].Rows.Count; i++)
{
textBox3.Text += set.Tables[1].Rows[i]["工号"].ToString() + set.Tables[1].Rows[i]["姓名"].ToString() + "\r\n";
}
}
#endregion
使用DataReader查询
#region//使用DataReader方式
SqlDataReader reader=cmd.ExecuteReader();
while (reader.Read())
{
textBox3.Text += reader["SUBID"].ToString() + reader["SUBName"].ToString() + "\r\n";
}
if (reader.NextResult())
{
while (reader.Read())
{
textBox3.Text += reader["工号"].ToString() + reader["姓名"].ToString() + "\r\n";
}
}
reader.Close();
#endregion