• 在.NET Framework 应用程序中使用ADO.NET访问数据库


     

    一、常用的数据访问组件

    1、  访问SQL Server数据库系统所用到的组件

    SqlConnection………连接SQL Server数据库系统

    SqlCommand………..向SQL Server数据库系统提交执行SQL命令

    SqlDataReader………阅读执行SQL命令返回的数据

    SqlDataAdapter…......利用此组件可以将数据库中的数据填充到DataSet数据集

    注意:使用上述组件需要引入System.Data.SqlClient命名空间。

    2、  访问Access数据库所用到的组件

    OleDbConnection……连接OleDB数据库系统

    OleDbCommand……..向OleDB数据库系统提交执行SQL命令

    OleDbDataReader……阅读执行SQL命令返回的数据

    OleDbDataAdapter…..利用此组件可以将数据库中的数据填充到DataSet数据集

    注意:使用上述组件需要引入System.Data.OleDb命名空间。

    二、访问数据库的途径

                           

    三、如何连接数据库

    1、  连接SQL Server的实例

    [C#版本]

    using System.Data.SqlClient;

    ……

    // 连接串的含义是:登录计算机名为“(local)”的数据库服务器,登录的用户名为a,密码为b,

    // 并且假设已经在SQL Server中创建一个名为dbname的数据库。

    SqlConnection conn = new SqlConnection("Server=(local); Database=dbname; User ID=a; Password=b;");

    conn.Open();   // 打开数据库连接

    ……

    conn.Close();   // 关闭数据库连接

    [VB版本]

    Imports System.Data.SqlClient

    ……

    ' 连接串的含义是:登录计算机名为“(local)”的数据库服务器,登录的用户名为a,密码为b,

    ' 并且假设已经在SQL Server中创建一个名为dbname的数据库。

    Dim conn As New SqlConnection("Server=(local); Database=dbname; User ID=a; Password=b;")

    conn.Open()        ' 打开数据库连接

    ……

    conn.Close()        ' 关闭数据库连接

    2、  连接Access的实例

    [C#版本]

    using System.Data.OleDb;

    ……

    // 连接串的含义是:程序将通过Microsoft.Jet.OLEDB.4.0访问Access数据库,

    // 并且假设已经在Access 2000中创建一个数据库,该数据库的文件名为c:db1.mdb。

    OleDbConnection conn

    = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=c:db1.mdb;");

    conn.Open();       // 打开数据库连接

    ……

    conn.Close();       // 关闭数据库连接

    [VB版本]

    Imports System.Data.OleDb

    ……

    ' 连接串的含义是:程序将通过Microsoft.Jet.OLEDB.4.0访问Access数据库,

    ' 并且假设已经在Access 2000中创建一个数据库,该数据库的文件名为c:db1.mdb。

    Dim conn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=c:db1.mdb;")

    conn.Open()        ' 打开数据库连接

    ……

    conn.Close()        ' 关闭数据库连接

    四、如何通过DataReader访问数据

    这里我们给出的范例是如何通过DataReader读取SQL Server数据库中的数据,如果你需要访问的是Access数据库,那么只需将程序源代码中的SqlConnection、SqlCommand、SqlDataReader分别更改为OleDbConnection、OleDbCommand、OleDbDataReader。同时把数据库连接串由"Server=(local); Database=dbname; User ID=a; Password=b;"更改为"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=c:db1.mdb;"的形式。

    [C#版本]

    using System.Data.SqlClient;

    ……

    // 连接串的含义是:登录计算机名为“(local)”的数据库服务器,登录的用户名为a,密码为b,

    // 并且假设已经在SQL Server中创建一个名为dbname的数据库。

    SqlConnection conn = new SqlConnection("Server=(local); Database=dbname; User ID=a; Password=b;");

    conn.Open();       // 打开数据库连接

    SqlCommand cmd = new SqlCommand();        // 创建执行SQL命令的对象cmd

    cmd.Connection = conn;        // 指定cmd将通过conn连接传输SQL命令

    cmd.CommandText = "Select * From mytable";     // 定义cmd将要执行的SQL命令

    SqlDataReader sqlDR;   // 定义DataReader数据阅读器(对象变量sqlDR)

    sqlDR = cmd.ExecuteReader();     // 执行SQL命令,执行返回结果形成DataReader对象。

    while(sqlDR.Read())    // 阅读一行数据

    {

         // 将该行数据当中的字段名为“column1”的数据输出

         ListBox1.Items.Add(sqlDR["column1"].ToString());

    }

    sqlDR.Close();

    conn.Close();   // 关闭数据库连接

    [VB版本]

    Imports System.Data.SqlClient

    ……

    ' 连接串的含义是:登录计算机名为“(local)”的数据库服务器,登录的用户名为a,密码为b,

    ' 并且假设已经在SQL Server中创建一个名为dbname的数据库。

    Dim conn As New SqlConnection("Server=(local); Database=dbname; User ID=a; Password=b;")

    conn.Open()        ' 打开数据库连接

    Dim cmd As New SqlCommand()           ' 创建执行SQL命令的对象cmd

    cmd.Connection = conn         ' 指定cmd将通过conn连接传输SQL命令

    cmd.CommandText = "Select * From mytable"      ' 定义cmd将要执行的SQL命令

    Dim sqlDR As SqlDataReader       ' 定义DataReader数据阅读器(对象变量sqlDR)

    sqlDR = cmd.ExecuteReader()      ' 执行SQL命令,执行返回结果形成DataReader对象。

    While(sqlDR.Read())    ' 阅读一行数据

         ' 将该行数据当中的字段名为“column1”的数据输出

         ListBox1.Items.Add(sqlDR("column1"))

    End While

    sqlDR.Close()

    conn.Close()        ' 关闭数据库连接

    五、如何通过DataSet访问数据

    这里我们给出的范例是如何通过DataAdapter读取SQL Server数据库中的数据并且复制填充到DataSet当中,如果你需要访问的是Access数据库,那么只需将程序源代码中的SqlConnection、SqlCommand、SqlDataAdapter分别更改为OleDbConnection、OleDbCommand、OleDbDataAdapter。同时把数据库连接串由"Server=(local); Database=dbname; User ID=a; Password=b;"更改为"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=c:db1.mdb;"的形式。

    [C#版本]

    using System.Data;

    using System.Data.SqlClient;

    ……

    // 连接串的含义是:登录计算机名为“(local)”的数据库服务器,登录的用户名为a,密码为b,

    // 并且假设已经在SQL Server中创建一个名为dbname的数据库。

    SqlConnection conn = new SqlConnection("Server=(local); Database=dbname; User ID=a; Password=b;");

    conn.Open();       // 打开数据库连接

    SqlCommand cmd = new SqlCommand();        // 创建执行SQL命令的对象cmd

    cmd.Connection = conn;        // 指定cmd将通过conn连接传输SQL命令

    cmd.CommandText = "Select * From mytable";     // 定义cmd将要执行的SQL命令

    SqlDataAdapter sqlDA = new SqlDataAdapter(cmd);// 定义数据适配器,该适配器将执行cmd的命令

    DataSet ds = new DataSet(); // 创建DataSet数据集对象

    sqlDA.Fill(ds,"Table1");// 通过数据适配器执行SQL命令,执行得到的数据表填充到数据集ds

    conn.Close();   // 关闭数据库连接

    for(int i=0; i<ds.Tables["Table1"].Rows.Count; i++)     // 可以随意阅读任意一行数据

    {

         // 将该行数据当中的字段名为“column1”的数据输出

         ListBox1.Items.Add(ds.Tables["Table1"].Rows[i]["column1"].ToString());

    }

    dataGrid1.DataSource = ds.Tables["Table1"]; //也可将数据集ds中的整个数据表绑定到数据显示控件

    // 如果是ASP.NET程序,还需要以下一行语句才能实现将数据集ds绑定到数据显示空间

    // dataGrid1.DataBind();

    [VB版本]

    Imports System.Data

    Imports System.Data.SqlClient

    ……

    ' 连接串的含义是:登录计算机名为“(local)”的数据库服务器,登录的用户名为a,密码为b,

    ' 并且假设已经在SQL Server中创建一个名为dbname的数据库。

    Dim conn As New SqlConnection("Server=(local); Database=dbname; User ID=a; Password=b;")

    conn.Open()        ' 打开数据库连接

    Dim cmd As New SqlCommand()           ' 创建执行SQL命令的对象cmd

    cmd.Connection = conn         ' 指定cmd将通过conn连接传输SQL命令

    cmd.CommandText = "Select * From mytable"      ' 定义cmd将要执行的SQL命令

    Dim sqlDA As New SqlDataAdapter(cmd) ' 定义数据适配器,该适配器将执行cmd的命令

    Dim ds As New DataSet() ' 创建DataSet数据集对象

    sqlDA.Fill(ds,"Table1") ' 通过数据适配器执行SQL命令,执行得到的数据表填充到数据集ds

    conn.Close()   ' 关闭数据库连接

    Dim i As Integer

    For i=0 To ds.Tables("Table1").Rows.Count-1        ' 可以随意阅读任意一行数据

         ' 将该行数据当中的字段名为“column1”的数据输出

         ListBox1.Items.Add(ds.Tables("Table1").Rows(i)("column1").ToString())

    Next

    dataGrid1.DataSource = ds.Tables("Table1") '也可将数据集ds中的整个数据表绑定到数据显示控件

    ' 如果是ASP.NET程序,还需要以下一行语句才能实现将数据集ds绑定到数据显示空间

    ' dataGrid1.DataBind()

    六、如何执行“添加”、“修改”、“删除”等无返回结果的SQL命令

    若需执行“添加”、“修改”、“删除”等无返回结果的SQL命令,只需通过Command对象执行Insert、Update、Delete命令即可,如本例程序所示。如果你需要访问的是Access数据库,那么只需将程序源代码中的SqlConnection、SqlCommand分别更改为OleDbConnection、OleDbCommand。同时把数据库连接串由"Server=(local); Database=dbname; User ID=a; Password=b;"更改为"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=c:db1.mdb;"的形式。

    [C#版本]

    using System.Data.SqlClient;

    ……

    // 连接串的含义是:登录计算机名为“(local)”的数据库服务器,登录的用户名为a,密码为b,

    // 并且假设已经在SQL Server中创建一个名为dbname的数据库。

    SqlConnection conn = new SqlConnection("Server=(local); Database=dbname; User ID=a; Password=b;");

    conn.Open();       // 打开数据库连接

    SqlCommand cmd = new SqlCommand();        // 创建执行SQL命令的对象cmd

    cmd.Connection = conn;        // 指定cmd将通过conn连接传输SQL命令

    cmd.CommandText = "Insert Into mytable(column1) values('张三')";    // “添加数据”SQL命令

    // 若需执行“修改数据”SQL命令

    // cmd.CommandText = "Update mytable Set column1='张三'  Where id=1"; // 修改id为1的记录

    // 若需执行“删除数据”SQL命令

    // cmd.CommandText = "Delete From mytable Where id=1";    // 删除id为1的记录

    cmd.ExecuteNonQuery(); // 执行SQL命令,返回值表示操作所影响的记录数量

    conn.Close();   // 关闭数据库连接

    [VB版本]

    Imports System.Data.SqlClient

    ……

    ' 连接串的含义是:登录计算机名为“(local)”的数据库服务器,登录的用户名为a,密码为b,

    ' 并且假设已经在SQL Server中创建一个名为dbname的数据库。

    Dim conn As New SqlConnection("Server=(local); Database=dbname; User ID=a; Password=b;")

    conn.Open()        ' 打开数据库连接

    Dim cmd As New SqlCommand()           ' 创建执行SQL命令的对象cmd

    cmd.Connection = conn         ' 指定cmd将通过conn连接传输SQL命令

    cmd.CommandText = "Insert Into mytable(column1) values('张三')"     ' “添加数据”SQL命令

    ' 若需执行“修改数据”SQL命令

    ' cmd.CommandText = "Update mytable Set column1='张三'  Where id=1"       ' 修改id为1的记录

    ' 若需执行“删除数据”SQL命令

    ' cmd.CommandText = "Delete From mytable Where id=1"      ' 删除id为1的记录

    cmd.ExecuteNonQuery()  ' 执行SQL命令,返回值表示操作所影响的记录数量

    conn.Close()        ' 关闭数据库连接

    七、如何实现将DataSet数据集同步到SQL Server数据库

    SqlDataAdapter除了可以从SQL Server数据库查询数据填充到DataSet,还可以将DataSet数据集同步到SQL Server数据库。调用SqlDataAdapter.Fill()查询数据库填充数据集,只需要设置SelectCommand属性使SqlDataAdapter与实现查询功能的SqlCommand组件关联;如果调用SqlDataAdapter.Update()执行同步操作,则需要通过设置InsertCommand、UpdateCommand、DeleteCommand属性使SqlDataAdapter分别与实现插入记录、修改记录、删除记录的3个SqlCommand组件关联,该设置可以依靠SqlCommandBuilder组件自动完成。

    [C#版本]

    using System.Data.SqlClient;

    ……

    // 连接串的含义是:登录计算机名为“(local)”的数据库服务器,登录的用户名为a,密码为b,

    // 并且假设已经在SQL Server中创建一个名为dbname的数据库。

    SqlConnection conn = new SqlConnection("Server=(local); Database=dbname; User ID=a; Password=b;");

    conn.Open();       // 打开数据库连接

    SqlCommand cmd = new SqlCommand();        // 创建执行SQL命令的对象cmd

    cmd.Connection = conn;        // 指定cmd将通过conn连接传输SQL命令

    cmd.CommandText = "Select * From mytable";     // 定义cmd将要执行的SQL命令

    SqlDataAdapter sqlDA = new SqlDataAdapter(cmd);// 定义数据适配器,该适配器将执行cmd的命令

    DataSet ds = new DataSet(); // 创建DataSet数据集对象

    sqlDA.Fill(ds,"Table1");// 通过数据适配器执行SQL命令,执行得到的数据表填充到数据集ds

    conn.Close();   // 关闭数据库连接

    ……

    对DataSet的DataTable进行增、删、改的程序代码

    ……

    new SqlCommandBuilder(da);  //自动设置InsertCommand、UpdateCommand、DeleteCommand属性

    conn.Open();           

    da.Update(ds, "Table1");

    conn.Close();

    ds.Tables["table1"].AcceptChanges();

    如果对DataSet的DataTable进行增、删、改后希望放弃同步到数据库,可以执行如下代码:

    ds.Tables["table1"].RejectChanges();

  • 相关阅读:
    数据缓存/NSURLSession
    NSURLConnection基本使用/多线程断点下载/文件的上传
    HTTP协议/数据安全
    block的概念及基本使用 /block访问外部变量
    NSOperation简单介绍/NSOperation基本操作/自定义NSOperation
    GCD介绍/GCD的基本使用/GCD的常见用法
    NSThread方式创建线程/线程安全/线程间的通信
    面试常见知识点
    新课堂练习题
    线程概述
  • 原文地址:https://www.cnblogs.com/mobobo/p/5357842.html
Copyright © 2020-2023  润新知