Ado.Net基础拾遗一:读取数据

从数据库中读取数据:

使用DataReader对象从数据库中读取数据

首先需要添加几个命名空间

1 //需要添加的命名空间
2 using System.Configuration;
3 using System.Data;
4 using System.Data.SqlClient;

配置文件如下

1 <configuration>
2     <connectionStrings>
3         <add name="NorthwindConnectionString" connectionString="Data Source=TANGPRO-PC;Initial Catalog=Northwind;Integrated Security=True"
4             providerName="System.Data.SqlClient" />
5     </connectionStrings>
6 </configuration>

具体实现代码

 1         //从配置文件中读取数据库连接信息
 2             string conStr = ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString;
 3             SqlConnection conn = new SqlConnection(conStr);//使用SqlConnection对象与数据库相连接
 4 
 5 
 6             //Command对象使用Connection对象执行SQL查询,它返回的结果通常存储在 DataSet或DataReader中
 7             SqlCommand myCommand = new SqlCommand();
 8             myCommand.CommandText = "SELECT TOP 3 * FROM CUSTOMERS"; //需要执行的SQL语句
 9             myCommand.CommandType = CommandType.Text; //CommandType.Text 表示 SQL 语句是内部文本
10             myCommand.Connection = conn; //SqlCommand对象的连接对象
11 
12             //打开连接
13             myCommand.Connection.Open();
14 
15             //此处存放在 DataReader中
16             SqlDataReader myReader = myCommand.ExecuteReader(CommandBehavior.CloseConnection);
17 
18             //将返回的数据绑定到 GridView控件中
19             GridView1.DataSource = myReader;
20             GridView1.DataBind();
21 
22             //读取完毕后销毁连接
23             myCommand.Dispose();
24             conn.Dispose();

结果:

Ado.Net基础拾遗一:读取数据

 使用数据适配器

  •  SqlDataAdaper是一个特殊的类,其作用是在断开连接的DataTable对象和物理数据源之间搭起桥梁
  • 其提供双向的传输机制,它可以在数据源上执行SELECT语句,将结果传送到DataTable对象中,还可以执行标准的INSERT,UPDATE,DELETE语句,从DataTable对象中提取输入的数据
  • SqlDataAdaper类提供了一个Fill()方法,调用Flii()方法将执行SelectCommand属性中提供的命令,获取结果集,并把它复制到DataTable对象中

实现代码:

 1    protected void Page_Load(object sender, EventArgs e)
 2         {
 3             if (!Page.IsPostBack)
 4             {
 5                 //从配置文件中读取数据库连接信息
 6                 string conStr = ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString;
 7                 SqlConnection conn = new SqlConnection(conStr);//使用SqlConnection对象与数据库相连接
 8 
 9                 SqlCommand cmd = new SqlCommand();
10                 cmd.CommandType = CommandType.Text;
11                 cmd.Connection = conn;
12                 cmd.CommandText = "SELECT TOP 5 * FROM CUSTOMERS";
13 
14                 DataTable myTable = new DataTable();
15                 
16                 SqlDataAdapter myAdapter = new SqlDataAdapter();
17 
18                 //使用前面创建的 SqlCommand 对象填充 DataAdapter对象的SelectCommand属性
19                 myAdapter.SelectCommand = cmd;
20 
21                 //调用Flii()方法将执行SelectCommand属性中提供的命令,获取结果集,并把它复制到DataTable对象中
22                 myAdapter.Fill(myTable); //Fill()方法返回一个已填充的DataTable对象
23 
24                 GridView1.DataSource = myTable.DefaultView;
25                 GridView1.DataBind();
26 
27                 myAdapter.Dispose();
28                 cmd.Dispose();
29                 conn.Dispose();
30             }
31 
32         }

结果

Ado.Net基础拾遗一:读取数据

使用参数

 1        protected void Page_Load(object sender, EventArgs e)
 2         {
 3             if (!Page.IsPostBack)
 4             {
 5                 string conStr = ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString;
 6                 SqlConnection conn = new SqlConnection(conStr);
 7 
 8                 SqlCommand myCommand = new SqlCommand();
 9                 myCommand.CommandType = CommandType.Text; 
10                 myCommand.Connection = conn;
11                 myCommand.CommandText = "SELECT * FROM CUSTOMERS WHERE CITY = @CITY AND CONTACTNAME= @CONTACT"; //此处使用了参数@CITY @CONTACT
12 
13 
14                 //创建SqlParameter对象,使用参数有助于防止可能的 SQL 注入攻击
15                 //一般只需要填写ParameterName 和 Value属性即可
16                 SqlParameter cityPara = new SqlParameter();
17                 cityPara.ParameterName = "@CITY";  //这个读写属性获取或设置参数的名称
18                 cityPara.SqlDbType = SqlDbType.VarChar; //获取或设置参数值的SQL Server数据库类型
19                 cityPara.Size = 15; //这个读写属性获取或设置参数值的大小
20                 cityPara.Value = "Berlin"; //参数对象提供的值,这个值在运行期间传送给命令中定义的参数
21 
22                 SqlParameter contactPara = new SqlParameter();
23                 contactPara.ParameterName = "@CONTACT";
24                 contactPara.SqlDbType = SqlDbType.VarChar;
25                 contactPara.Size = 15;
26                 contactPara.Value = "Maria Anders";
27 
28 
29                 //向SqlCommand对象中加入参数
30                 myCommand.Parameters.Add(cityPara);
31                 myCommand.Parameters.Add(contactPara);
32 
33                 myCommand.Connection.Open();
34 
35                 SqlDataReader myReader = myCommand.ExecuteReader(CommandBehavior.CloseConnection);
36 
37                 GridView1.DataSource = myReader;
38                 GridView1.DataBind();
39 
40                 myCommand.Dispose();
41                 conn.Dispose();
42             }
43         }

第二种加入参数的方法(更简便)

1            myCommand.CommandText = "SELECT * FROM CUSTOMERS WHERE CITY = @CITY AND CONTACTNAME= @CONTACT"; //此处使用了参数@CITY @CONTACT
2 
3                 myCommand.Parameters.Add(new SqlParameter("CITY", "Berlin")); //期中CITY对应 SQL语句中的 @CITY   ,Berlin是其需要输入的值
4                 myCommand.Parameters.Add(new SqlParameter("CONTACT", "Maria Anders"));

结果:

Ado.Net基础拾遗一:读取数据