根据查询结果保存在数据库服务器端还是本地客户端,可分两种连接数据库的方式
那么这两种方式的好坏:
查询结果保存在数据库服务器:之所以要保存在数据库服务器端,是因为一旦查询结果数据量大,如果保存在本地会占用大量的内存,所以该方式的优点是不占内存。但对 于 数据量小情况下,还要时刻与数据库保持连接,一旦连接断开,数据库出现异常,就不能获取数据,所以才有了dataset集合,很好的弥补了这些缺陷。因为此方式是查询完后直接将结果装到dataset集合里,再无与数据库有任何关联,但需要占一定内存
1.查询结果保存在数据库服务器端
using (SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog=exercise;User ID=sa;Password=123456"))
{
conn.Open();//打开链接
SqlCommand cmd = conn.CreateCommand(); // 创建执行sql命令对象
cmd.CommandText = "select * from product where statu =@statu"; // 设置用于拼接sql语句中的变量参数,防止sql注入漏洞(1‘or'1'='1)
cmd.Parameters.Add(new SqlParameter("@statu",txtName.Text)); //给参数设值
using (SqlDataReader reader = cmd.ExecuteReader()) // ExecuteReader() 执行sql,将结果存到sqldatareader这个类中
while (reader.Read()) // read()方法 表示从结果中以指针的方式从第一条数据之前指向最后一条数据之后,期间都返回为true,直到指向完毕返回false
{
MessageBox.Show(reader.GetString(0)); //reader.GetString(0) 表示结果中第0列的值
}
}
}
******:
using(){ } :using 块用于释放资源,一般()中 类实现了IDispose 接口,大括号代码执行完毕,资源释放,先前微软没有退出using 用法,资源回收都是要靠try catch来做,更加麻烦 Data Source=.;Initial Catalog=exercise;User ID=sa;Password=123456 数据库连接信息:Data Source:数据库地址,"."表示本地;Initial Catalog:数据库名称
User ID:用户名,Password:密码
2.查询结果保存在本地客户端
using (SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog=exercise;User Id=sa; Password=123456"))
{
SqlCommand cmd = conn.CreateCommand();//
cmd.CommandText = "select * from product where statu = @statu";
cmd.Parameters.Add(new SqlParameter("@statu", txtName.Text));
SqlDataAdapter adpater = new SqlDataAdapter(cmd); // SqlDataAdapter这个类用于填充dataset集合,管理cmd
DataSet dataset = new DataSet(); // 实例化一个dataset ,该类是用来存放查询结果的一个复杂集合,查询完毕后,就可以关闭数据库连接
adpater.Fill(dataset); // 执行sql,将查询结果放入dataset
conn.Close(); //关闭数据库连接
DataTable table = dataset.Tables[0]; // datatable 查询结果集,以表的形式,因支持多条select 语句,所以dataset.Tables需要有索引
DataRowCollection rows = table.Rows; // 查询结果集合表中的行集
DataRow row;
string name;
for (int i = 0; i < rows.Count; i++)
{
row = rows[i]; // 单行
name = (string)row["pro_desc"]; // 单行中的某一列,这里是pro_desc 这一列
MessageBox.Show(name); //显示信息
}
}