ADO.NET操作数据库

ADO.NET基本结构
ADO.NET主要利用两个组件来访问和操作数据
(1).NET数据提供程序:访问及处理数据的组件,包括一下4个核心对象
     Connection:提供与数据源的连接
     Command:用于查询、修改、删除数据的T-SQL命令。
     DataReader:从数据源中快速读取数据流
     DataAdapter:连接DataSet对象和数据源的桥梁。
(2)数据集DataSet:内存中的数据库,可以存放不同类型的数据源。

11.2连接SQL Server数据库
11.2.1 SqlConnection 类
       命名空间using System.Data.SqlClient;
       提供对SQL Server数据库的连接
方法一:
       SqlConnection myCon = new SqlConnection("Persist Security Info=False;User id=sa;pwd=frock;database=northwind;server=(local)");
        //建立连接
        myCon.Open();

另一种方式是在配置文件中建立连接,这样有较好的移植性:
在项目中添加Web.config文件,找到<configuration>并添加如下代码:
<configuration>
 <connectionStrings>
  <add
     name="myDb"
     connectionString="Persist Security Info=False;User id=sa;pwd=frock;database=northwind;server=(local)"
     providerName="System.Data.SqlClient"
  />
</connectionStrings>

在需要使用连接字符串的地方添加如下代码:
 /// 读取配置文件,连接SQL Server数据库
    public void ConnectDb_config()
    {
        //得到一个SqlConnection
        SqlConnection myCon = new SqlConnection();

        //构造连接字符串
        ConnectionStringSettings setting = System.Configuration.ConfigurationManager.ConnectionStrings["myDb"];
        myCon.ConnectionString = setting.ConnectionString;

        //建立连接
        myCon.Open();
    }
11.2.2 断开数据库 (SqlConnection)
       myCon.Close();

11.3 操作数据库
11.3.1  SqlCommand类 SqlDataReader类
    (1) 使用SqlCommand的ExecuteReader方法查询数据,并把结果放在一个SqlDataReader中
    void SerachDb()
    {
        //1 连接数据库
   
        //2 实例化一个SqlCommand对象
        SqlCommand myCom = new SqlCommand();

        //3 利用查询命令赋值SqlCommand的CommandText
        myCom.Connection = myCon;
        myCom.CommandText = "SELECT * FROM Customers";

        //4 查询,并查看是否成功
        SqlDataReader sdr = myCom.ExecuteReader();
        if (sdr.Read())
            Page.Response.Write("查询成功<br />");

        //5 断开连接
        myCon.Close();
    }
     (2) SqlDataReader对象提供从SQL数据库中读取行的只进流的方式,只能向后读取。 使用SqlDataReader sdr = myCom.ExecuteReader();语句创建
           使用SqlDataReader显示数据
    void ShowData()
    {
        //1 连接数据库

        //2 实例化一个SqlCommand对象
        SqlCommand myCom = new SqlCommand();

        //3 利用查询命令赋值SqlCommand的CommandText
        myCom.Connection = myCon;
        myCom.CommandText = "SELECT * FROM Customers";

        //4 查询,并输出结果
        SqlDataReader sdr = myCom.ExecuteReader();
        Page.Response.Write("<table border=1px>");
        while (sdr.Read())
        {
            Page.Response.Write("<tr>");
            Page.Response.Write("<td>" + sdr.GetString(sdr.GetOrdinal("CustomerID")) + "</td>"); //GetOrdinal()方法得到各个列的序号
            Page.Response.Write("<td>" + sdr.GetString(sdr.GetOrdinal("CompanyName")) + "</td>");
            Page.Response.Write("</tr>");
        }
        Page.Response.Write("</table>");

        //5 断开连接
        myCon.Close();
    }
11.3.2 操作数据
      通过ExecuteNonQuery方法,SqlCommand可以执行一个UPDATE,DELETE或者INSERT语句。
    void UpdateDb()
    {
        //1 连接数据库
    
        //2 实例化一个SqlCommand对象
        SqlCommand myCom= new SqlCommand();

        //3 利用修改命令赋值SqlCommand的CommandText
        myCom.Connection = myCon;
        myCom.CommandText = "UPDATE Customers SET CompanyName='KFC' WHERE CustomerID = 'ALFKI'";

        //4 输出影响的行数
        int i = myCom.ExecuteNonQuery();
        Page.Response.Write(i+"行数据被修改<br />"); //输出:1行被修改。

        //5 断开连接
        myCon.Close();
    }

 

11.4 内存数据对象DataSet---从数据源中检索出的数据在内存中的缓存,包括表、行、列,还包含数据约束和关系
数据是通过数据适配器从数据源进入到内存数据对象中的。
11.4.1 SqlDataAdapter类
     使用SqlDataAdapter在数据库和DataSet之间架起桥梁
    void UseDataAdapter()
    {
        //1 连接数据库
   
        //2 创建一个SqlDataAdapter对象
        SqlDataAdapter adapter = new SqlDataAdapter();

        //3 利用SqlDataAdapter查询数据,并把数据放在DataSet中
        SqlCommand selectCmd = new SqlCommand();
        selectCmd.Connection = myCon;
        selectCmd.CommandText = "SELECT SupplierID, CompanyName FROM Suppliers;";
        adapter.SelectCommand = selectCmd;

        DataSet dataSet = new DataSet("Suppliers");
        adapter.Fill(dataSet);//Fill数据
        Page.Response.Write("已连查询数据,并放入DataSet中<br />");

        //4 利用SqlDataAdapter对象操作语句
        //4.1 Update
        SqlCommand updateCmd = new SqlCommand();
        updateCmd.Connection = myCon;
        updateCmd.CommandText = "UPDATE Customers SET CompanyName='KFC' WHERE CustomerID = 'ALFKI'";
        adapter.UpdateCommand = updateCmd;
        //4.2 Delete
        SqlCommand deleteCmd = new SqlCommand();
        deleteCmd.Connection = myCon;
        deleteCmd.CommandText = "DELETE Customers WHERE CustomerID = 'ALFKI'";
        adapter.DeleteCommand= deleteCmd;
        //4.3 Insert
        SqlCommand insertCmd = new SqlCommand();
        insertCmd.Connection = myCon;
        insertCmd.CommandText = "INSERT INTO Customers(CustomerId) values ('ALFKI')";
        adapter.InsertCommand = insertCmd;
        //4.4 执行操作
        adapter.Update(dataSet);
        Page.Response.Write("已连操作数据,包括:修改、删除、插入<br />");

        //5 关闭数据库连接
        myCon.Close();
        Page.Response.Write("已关闭数据库<br />");
    }

11.4.2  DataSet 类
  public void FillDataSet()
    {
        //1 连接数据库
   
        //2 使用SqlCommand提交查询命令
        SqlCommand selectCMD = new SqlCommand("SELECT top 10 CustomerID, CompanyName FROM Customers", myCon);

        //3 获取数据适配器
        SqlDataAdapter custDA = new SqlDataAdapter();
        custDA.SelectCommand = selectCMD;

        //4 填充DataSet
        DataSet custDS = new DataSet();
        custDA.Fill(custDS, "Customers");

        //5 显示其中的DataTable对象中的数据
        Page.Response.Write("<table border=1>");
        for (int i = 0; i < custDS.Tables[0].Rows.Count; i++)
        {
            Page.Response.Write("<tr>");
            for (int j = 0; j < custDS.Tables[0].Columns.Count; j++)
            {
                Page.Response.Write("<td>" + custDS.Tables[0].Rows[i].ItemArray[j] + "</td>");
               //通过DataSet中的Tables属性获取其中的第一张表,然后利用Rows属性获取表中的行,然后利用行的ItemArray属性获取其中某个单元格的数据。
            }
            Page.Response.Write("</tr>");
        }
        Page.Response.Write("</table>");

        //6 断开连接
        myCon.Close();
    }

posted @ 2009-10-27 16:10  独行剑  阅读(340)  评论(0编辑  收藏  举报