zoukankan      html  css  js  c++  java
  • 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"));

    结果:

  • 相关阅读:
    如何写好 5000 行的 SQL 代码
    Oracle面对“数据倾斜列使用绑定变量”场景的解决方案
    OAuth2.0最简向导(多图预警)
    再见,2019!你好,2020!
    快过年了,来,来,来!给七大姑八大姨好好解释解释【啥是DBA 】
    linux 定期清除日志
    人工智能:才赢李世石,再“战”巴菲特
    人工智能:才赢李世石,再“战”巴菲特
    人工智能:才赢李世石,再“战”巴菲特
    人工智能:才赢李世石,再“战”巴菲特
  • 原文地址:https://www.cnblogs.com/TangPro/p/3683092.html
Copyright © 2011-2022 走看看