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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在.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();

 

以上是关于在.NET Framework 应用程序中使用ADO.NET访问数据库的主要内容,如果未能解决你的问题,请参考以下文章

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

在 .Net 3.5 应用程序中使用 Entity Framework 4.0 [重复]

.Net Framework认知

在Windows Server 2012 中安装 .NET 3.5 Framework

在 .NET Framework 4.0 中使用 TLS 1.2 的问题

在 .NET Core 中从 .NET Framework 使用 WCF 服务