在.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 [重复]
在Windows Server 2012 中安装 .NET 3.5 Framework