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();
结果:
使用数据适配器
- 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 }
结果
使用参数
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"));
结果: