zoukankan      html  css  js  c++  java
  • ADO.NET: 数据库编程

    建立简单数据库程序

    1.打开数据库连接

          ADO.NET connection 对象:

    using SD=system.Date;
    
    using MSA= system.Date.OleDb;
    
    using SWF=system.windows.Forms;
    
    .
    
    .
    
    .
    
     string sConnect;
    
    sConnect = string.Format(“Provider = {0}; Data Source= {1}{2}”,
    
    ”Provider = Microsoft.Jet.OLEDB.4.0”,system.AppDomain.CurrentDomain.BaseDirectory,
    
    “Sales.mdb”);
    
    MSA.oleDbConnection dbConn;
    
    dbConn = new MSA.oleDbConnection(sConnect);
    
    dbConn = Open();
    
    SWF.MessageBox.Show(dbConn.State.ToString() );

    2.执行查询语句并取回记录

      command and reader 对象:

    1

    3.关闭数据库连接

       关闭reader 和 connection

    dbReader.Close();
    
    dbConn.Close();
    
    
    SWF.MessageBox.Show( dbConn.State.ToString() );

    异常处理

      使用try-catch-finally 来保证收尾工作

         数据库关闭,资源被释放等等

    2

    对象模型

    不同数据库之间

       "相同"的编程模型,不管使用何种数据库

        不同的数据库连接字符串

        不同的名称空间和类:

         system.data.sqlclient.SqlConnection
    
         system.data.oracleClient.OracleConnection
    
         system.data.Odbc.OdbcConnection
    
         etc

    3

    Connection 字符串格式

    Connection string 对于不同的数据库来说是不同的,格式是数据库提供厂商定义的。

    现在还没有一个很好的文档包括所有的格式。

    Executive 概要

    几种访问数据库的方式:

    4

    Execute scalar:只返回一个值

    string sql;
    
    sql = string.Format(“select AcctBalance Form Customers where CID={0}”,cid)
    
    SQL.SqlCommand  dbCmd;
    
    dbCmd = new SQL.SqlCommand(sql, dbConn);
    
    decimal balance;
    
    balance = system.Convert.ToDecimal( dbCmd.ExecuteScalar() );

    ExecuteReader :产生一个 datereader对象

    DataReader = forward-only,read-only cursor

    没关闭之前都保持数据库的连接

    string sql = “select * from customers”;
    
    SQL.SqlCommand  dbCmd = new SQL.SqlCommand( sql, dbConn);
    
    SQL.SqlDataReader dbReader = dbCmd.ExecuteReader();
    
    while ( dbReader.Read() )
    
    (…)

    datasets:另一个.NET集合类

       特别适合像表格形式存储数据

       简单填充,传递,显示在GUI中

    5

    datesets = 非连接的记录集

       DataSet 是服务器端填充为结果的数据拷贝

       DataSet 在客户端运行和处理

       DataSet 可以重新连接数据库用于更新数据

    好处:减少DB服务器的负担;关闭连接后离线工作

    对于分布式程序是非常重要的。。

    DataSets 允许非连接的修改,客户端应用程序重新连接后更新

    8

    读取并填充 DataSet

       使用DataAdapter 对象,当DataSet被填充之后,与数据库服务器的连接就关闭了!

    string sql = “Select * From Customers;”
    
    SQL.SqlCommand dbCmd = new SQL.SqlCommand(sql, dbConn);
    
    SQL.SqlDataAdapter dbAdapter = new SQL.SqlDataAdapter( dbCmd )
    
    System.Data.DataSet  ds;
    
    ds = new System.Data.DataSet();
    
    
    
    dbConn.Open();
    
    dbAdapter.Fill(ds);
    
    dbConn.Close();

    foreach record..

    6

    绑定到DataGrid

    DataSet 可以被绑定到DataGrid控件

    this.dataGrid1.SetDataBinding(ds, “Table”);

    DataSets 像数据库

    无限制的表空间

    可以被查询,排序,更新

    支持视图,关系,约束

    7

    ExecuteNonQuery:写入数据库

       通过SQL动作:插入,更新和删除来对数据库进行写操作

    string sql; int row;
    
    sql = string.Format(“Delete From Customers where…”);
    
    SQL.SqlCommand dbCmd;
    
    dbCmd = new SQL.sqlCommand(sql, dbConn);
    
    dbConn.Open();
    
    rows = dbCmd.ExecuteNonQuery();
    
    dbConn.close();
    
    if(rows != 1 ) throw new system.ApplicationException(“Delete failed?!”);

    参数化查询

    参数化的形式

    select FirstName,LastName from Customers where CID =@CID;
    
    sql = “Select * from Customers Where CID = @CID order by LastName Asc, FirstName Asc“;
    
    SQL.SqlCommand dbCmd;
    
    dbCmd = new SQL.SqlCommand(sql,dbConn);
    
    dbComd.Parameters.Add(“@CID”,sqlDbType.BigInt);
    
    dbCmd.Parameters[0].Value = 1;
    
    dbReader = dbCmd.ExecuteReader();

    SQL Server 中的存储过程

    create PROCEDURE GetCustomer (@CID BigInt ) as select FirstName,LastName,AcctBalance from customers where CID = @CID
    
    RETURN
    
    SQL.SlCommand dbCmd = dbConn.CreateCommand();
    
    dbCmd.CommandText = “GetCustomer”;
    
    dbCmd.CommandType = CommandType.StoreProcedure;
    
    dbCmd.Parameters.Add(“@CID”,SqlDbTypr.BigInt);
    
    dbCmd.Parameters[0].Value = 1 ;
    
    dbReader = dbCmd.ExecuteReader();

    Transaction 中执行查询

    Command 对象的Begin Transaction 来创建一个Transaction 对象

    SQL.SqlTransaction txn = dbConn.BegionTransaction()
    
    string strSQL = “INSERT INTO Customers values(100,’小牛’,’言’,100000000,100000000,’01-Jan-2005’,’money’)”;
    
    SQL.SqlCommand dbCmd;
    
    dbCmd = new SQL.SqlCommand(strSQL,dbConn,txn);
    
    
    
    
    
    
    
    
    int intRecord=dbCmd.ExecuteNonQuery();
    
    if (intRecord == 1)
    
    {
    
    SWF.MessageBox.Show(“Update Successful”);
    
    txn.Commit();
    
    }
    
    else
    
    {
    
    SWF.MessageBox.Show(“Update Failed”);
    
    txn.Rollback();
    
    }
  • 相关阅读:
    福大软工1816 · 第五次作业
    福大软工1816 · 第四次作业
    第三次作业
    福大软工1816 · 第二次作业
    培养孩子应知的30个细节
    人力资源六大模块
    中小学班主任工作规定
    事业单位笔试题
    班级管理
    Leetcode 7 反转整数
  • 原文地址:https://www.cnblogs.com/HuXiaoxia/p/3433869.html
Copyright © 2011-2022 走看看