• 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();
        }

  • 相关阅读:
    Maven部署构件至远程仓库
    Maven远程仓库的认证
    Maven远程仓库的配置
    Maven实战系列文章
    使用Maven私服的好处
    使用Mavne生成可以执行的jar文件
    Visual Studio for Mac 简介
    HTTP 2.0与HTTP 1.1区别
    使用Microsoft的IoC框架:Unity来对.NET应用进行解耦
    围绕央行系统升级所产生的常见问题
  • 原文地址:https://www.cnblogs.com/chenlong/p/1590735.html
Copyright © 2020-2023  润新知