注意:本文暂时不讲解
数据库
的数据调出和显示,因为他涉及的东西比较多,所以我们将另外详细讲解。本文主要要讲的是数据库的增加、删除、修改。
一、定义
OleDbCommand
类型变量:
MyCommand
要对数据库进行增加、删除、修改的操作我们还需要根据
MyConnectio
的类型定义一个
OleDbCommand
或者
SqlCommand
对象(请注意如果
MyConnection
是
OleDbConnection
类型,那么只能用
OleDbCommand
;如果
MyConnection
是
SqlConnection
类型,那么那么只能用
SqlCommand
。这里假设
MyConnection
是
OleDbConnection
类)。(方法一)你可以象拖放
MyConnection
一样拖放一个
OleDbCommand
,并命名为
MyCommand
。(方法二)在
(
关联文件
).CS
文件中
protected System.Data.OleDb.OleDbConnection MyConnection;
下面手动添加:
protected System.Data.OleDb.OleDbCommand MyCommand;
在
private void InitializeComponent()
中
this.MyConnection = new System.Data.OleDb.OleDbConnection();
的下一行下面手动添加:
this.MyCommand = new System.Data.OleDb.OleDbCommand();
即可完成对
MyCommand
的定义
说明:
MyCommand
的作用是用来执行
SQL
命令
二、利用定义的
MyConnectio
和
MyCommand
对数据库进行增加、删除、修改
首先我们需要连接并打开一个数据库(关于数据库的连接和打开的操作请察看我们以前的文章)。打开数据库:
MyConnectio.Open();
然后我们需要给
MyCommand
指定要执行的
SQL
命令
: MyCommand.CommandText = "delete from admin";
接着我们需要给
MyCommand
指定数据源(对那个数据库执行
SQL
命令):
MyCommand.Connection = MyConnection;
然后我们执行
MyCommand
命令即可
: MyCommand. ExecuteNonQuery();
如果我们在执行还有
"delete from admin";
后需要接着执行
“
insert into admin (Admin_Code,Admin_Pwd) values(
‘
aa
’
,
’
bb
’
)
”,则我们只要再次指定
MyCommand
指定要执行的
SQL
命令
: MyCommand.CommandText =
“
insert into admin (Admin_Code,Admin_Pwd) values(
‘
aa
’
,
’
bb
’
)
”,然后执行
MyCommand. ExecuteNonQuery();
即可。(由于数据库未关闭,所以我们不需要也不可以再次
MyConnectio.Open();
,同理由于没有改变
MyCommand
的数据源所以我们也没有必要再次指定
MyCommand.Connection = MyConnection;
)
下面我们将详细讲解如何在
Page_Load()
中对数据库的增加、删除、修改,最后我们再来总结一下
ExecuteNonQuery(),ExecuteScalar(),ExecuteReader
的用法
--------------------------------------------------------------
1
、
增加新的记录
private void Page_Load(object sender, System.EventArgs e)
{
MyConnection.Open();
’打开数据库
MyCommand1.CommandText = "insert into admin values(
‘
aaddq
‘
,
‘
as
‘
,
‘
ss
‘
)";
MyCommand1.Connection = MyConnection;
MyCommand1.ExecuteNonQuery();
’由于增加了一条记录,所以返回
1
//
或者
MyCommand1.ExecuteReader();
先增加一条记录,然后返回一个
System.Data.OleDb.OleDbDataReader
类型的对象,该对象为
:EOF
//
或者
MyCommand1. ExecuteScalar();
先增加一条记录,返回未实列化的对象
MyConnection.Close();
}
-------------------------------------------------------------------
2
、
删除现有数据
private void Page_Load(object sender, System.EventArgs e)
{
MyConnection.Open();
’打开数据库
MyCommand1.CommandText = "delete * from admin";
MyCommand1.Connection = MyConnection;
MyCommand1.ExecuteNonQuery();
’由于删除了
n
条记录,所以返回
n
//
或者
MyCommand1.ExecuteReader();
先删除
n
条记录,然后返回一个
System.Data.OleDb.OleDbDataReader
类型的对象,该对象为
:EOF
//
或者
MyCommand1. ExecuteScalar();
先删除
n
条记录,返回未实列化的对象
MyConnection.Close();
}
------------------------------------------------------------
3
、
修改现有数据
private void Page_Load(object sender, System.EventArgs e)
{
MyConnection.Open();
’打开数据库
MyCommand1.CommandText = "update admin set admin_code=
’
212
’
,Admin_pwd=
’
43
’
where admin_code=
’
23
’
";
MyCommand1.Connection = MyConnection;
MyCommand1.ExecuteNonQuery();
’由于修改了
1
条记录,所以返回
n
//
或者
MyCommand1.ExecuteReader();
先修改了
1
条记录,然后返回一个
System.Data.OleDb.OleDbDataReader
类型的对象,该对象为
:EOF
//
或者
MyCommand1. ExecuteScalar();
先修改了
1
条记录,返回未实列化的对象
MyConnection.Close();
}
三、关于
MyCommand
的
ExecuteNonQuery(),ExecuteScalar(),ExecuteReader
方法的区别
:
1
、
ExecuteNonQuery():
执行
SQL
,返回一个整型变量,如果
SQL
是对数据库的记录进行操作,那么返回操作影响的记录条数,如果是
SQL="CREATE TABLE LookupCodes (code_id smallint IDENTITY(1,1) PRIMARY KEY CLUSTERED, code_desc varchar(50) NOT NULL)"
那么在表创建成功后该方法返回
–
1
。
例如:
private void Page_Load(object sender, System.EventArgs e)
{
MyConnection.Open();
’打开数据库
MyCommand1.CommandText = "CREATE TABLE LookupCodes (code_id smallint IDENTITY(1,1) PRIMARY KEY CLUSTERED, code_desc varchar(50) NOT NULL)"
;
MyCommand1.Connection = MyConnection;
MyCommand1.ExecuteNonQuery();
’首先建立一个
LookupCodes
表,然后返回
-1
//
或者
MyCommand1.ExecuteReader();
首先建立一个
LookupCodes
表,然后返回一个
System.Data.OleDb.OleDbDataReader
类型的对象,该对象为
:EOF
//
或者
MyCommand1. ExecuteScalar();
首先建立一个
LookupCodes
表,返回未实列化的对象
MyConnection.Close();
}
2
、
ExecuteScalar()
:执行
SQL
,(如果
SQL
是查询
Select
)返回查询结果的第一行第一列,如果(如果
SQL
不是查询
Select
)那么返回未实列化的对象,因为对象未实列化,所以返回结果不能
ToString(),
不能
Equals(null)
,也就是说返回结果没有任何作用
3
、
executeReader
方法执行
SQL
,(如果
SQL
是查询
Select
)返回查询结果的集合,类型是
System.Data.OleDb.OleDbDataReader
,你可以通过此结果,获取查询的数据。如果(如果
SQL
不是查询
Select
)那么返回一个没有任何数据的
System.Data.OleDb.OleDbDataReader
类型的集合
(EOF)
四、总结:
ASP.Net
中对于数据库的操作方法很多,要实现统一个目标不同的人可能会采取不同的方法,就好像在
ASP
中有的人喜欢用
RS.ADDNEW
,有的人喜欢用”
Insert Into
”,主要是看个人的习惯,当然在性能上不同的方法可能会存在较大的差别,这个只能靠我们在平常的学习中一点一滴的积累经验的。另外顺便说一下
ASP.Net
页提供类似如下方式的操作方法:
OleDbCommand2.Parameters("au_id").Value = TextBox1.Text
OleDbCommand2.Parameters("au_lname").Value = TextBox2.Text
OleDbCommand2.Parameters("au_fname").Value = TextBox3.Text
OleDbCommand2.Parameters("phone").Value = TextBox4.Text
OleDbCommand2.Parameters("address").Value = TextBox5.Text
OleDbCommand2.Parameters("city").Value = TextBox6.Text
OleDbCommand2.Parameters("st").Value = TextBox7.Text
OleDbCommand2.Parameters("zip").Value = TextBox8.Text
OleDbCommand2.Parameters("contract").Value = CheckBox1.Checked
cmdresults = OleDbcommand2.ExecuteNonQuery()
这个方法在我们以后的文章中,我们会慢慢给大家讲解的,下一章我们要讲的是如何从数据库中读取数据
前面我们已经说了如何操作
数据库
,但几乎全部是通过
OleDbCommand
和
OleDbDataReader
来做的,这次我们说说如何通过
OleDbDataAdapter
来操作数据库!关于
OleDbDataAdapter
的用法实际上我们在以前已经讲过了,由于
OleDbDataAdapter
是
DataSet
和数据源之间建立联系的一个桥梁,而
DataSet
用于对单层数据、
XML
数据和关系数据进行存储、远程处理和编程!。
我们曾经讲过利用
Command
来对数据库进行增加、删除和修改操作,但是我们利用
DataSet
和
DataAdapter
能够更加方便的对数据库进行操作,基本是我们可以认为
DataSet
是专门为
WEB
而设计的,这也是
ADO.NET
和
ADO
的一个重要的区别。
下面是
DataSet
和
SQL
数据的的关系图,
通过这个图我们可以看出
DataSet
和
DataAdapter
以及
SQL
数据库的关系。
下面我们来讲解一下如何利用
DataSet
和
DataAdapter
来操作上据库
MyConnection.Open(); //
打开数据库,请参考前面文章的内容
MyCommand.Connection = MyConnection; //
设置
Command
,请参考前面文章的内容
MyCommand. CommandText =
“
select * from admin
”
; //
设置
Command
,参考前面文章的内容
OleDbDataAdapter MyDataAdapter = new OleDbDataAdapter(); //
定义
OleDbDataAdapte
对象
MyDataAdapter.SelectCommand = MyCommand; //
设置
OleDbDataAdapte
对象的
SelectCommand
属性
System.Data.DataSet MyDataSet = new System.Data.DataSet(); //
定义
DataSet
MyDataAdapter.Fill(MyDataSet,"admin"); //
通过
OleDbDataAdapte
对象的
SelectCommand
属性填充
MyDataSet
MyConnection.Close(); //
关闭数据库
整个过程分以下几步:
1
.建立数据库连接(打开数据库,请参考前面文章的内容)
2
.建立
OleDbDataAdapter
对象!
3
.实例化
OleDbDataAdapter
对象!
4
.建立一个
DataSet
对象,执行
SQL
语句得到的表添加到其中
5
.关闭数据库连接
通过上面的步骤我们就可以使用
DataBind
将
DataSet
中的数据绑定到特定的控件上了!(下一章我们将讲解如何邦定数据库)
我们说过但是我们可以利用
DataSet
和
DataAdapter
能够更加方便的对数据库进行操作,如何通过
OleDbDataAdapter
来执行数据库的操作的,我们只需要对
DataSet
中的数据进行增加、删除、修改等操作,然后在将
DataSet
提交给数据库即可
//
利用利用
DataSet
和
DataAdapter
操作数据库
public Boolean DoDB()
{
MyConnection.Open(); //
打开数据库,请参考前面文章的内容
MyCommand.Connection = MyConnection; //
设置
Command
,请参考前面文章的内容
MyCommand. CommandText =
“
select * from admin
”
; //
设置
Command
,参考前面文章的内容
OleDbDataAdapter MyDataAdapter = new OleDbDataAdapter(); //
定义
OleDbDataAdapte
对象
MyDataAdapter.SelectCommand = MyCommand; //
设置
OleDbDataAdapte
对象的
SelectCommand
属性
System.Data.DataSet MyDataSet = new System.Data.DataSet(); //
定义
DataSet
MyDataAdapter.Fill(MyDataSet,"admin"); //
通过
OleDbDataAdapte
对象的
SelectCommand
属性填充
MyDataSet
OleDbCommandBuilder MyCommandBuild = new OleDbCommandBuilder(MyDataAdapter);//
关联
DataSet
和数据库的操作的,必不可少
foreach(DataRow dr in MyDataSet.Tables["Admin"].Rows)
{
if(dr["Admin_Code"].ToString().Trim().Equals("a"))
{
dr.Delete(); //
删除
DataSet
中的行
}
}
MyDataSet.Tables["Admin"].Rows[0][0] = "ss";//
更新
DataSet
中第一行第一列的值
string [] dd = new String[3]{"a","b","v"};
MyDataSet.Tables["Admin"].Rows.Add(dd);//
增加一行
MyDataAdapter.Update(MyDataSet,"Admin");//
将
DataSet
中”
Admin
”表中的数据提交给数据库,完成数据库的更新
MyConnection.Close();//
关闭数据库
}
这个程序和我们前面用到的利用
Command
的
delete
、
insert
、
update
例程是执行同样的功能的,我这里改成了用
MyDataAdapter
来达到同样的效果!
要通过
MyDataAdapter
执行对数据库的操作,我们要有下面的几步:
1
.
建立数据库连接
MyConnection
2
.
实例化
OleDbDataAdapter
对象!
3
.
建立一个
DataSet
对象,并把执行
select
语句得到的记录添加到其中
4
.
建立
OleDbCommandBuilder
对象!
并让它与我们前面的
OleDbDataAdapter
对象关联!语句如下:
OleDbCommandBuilder MyCommandBuild = new OleDbCommandBuilder(MyDataAdapter);
5
.
对
DataSet
中包含表的特定记录进行增加、删除、修改
6
.
执行
OleDbDataAdapter
对象的
Update
命令更新数据库,语句如下:
MyDataAdapter.Update(ds,"notes");
7
.
关闭数据库连接
总结:
DataSet
是
ADO.NET
中非常重要的内容,也是
ADO.NET
和
ADO
的区别的一个重要表现,特别适合成批的数据操作,也是数据棒定的重要来源。
OleDbDataAdapter
是
DataSet
和数据源之间建立联系的一个桥梁,要熟练的使用
DataSet
我们需要熟练的掌握
OleDbDataAdapter
。下一章我们将讲述
Data
对于用过
beta2
版的网友来说,学习本文的内容将会是十分的简单,因为
.net
正式版和
beta2
版的差别不大,所以对于
beta2
中的程序你几乎可以不作修改(或者只做少量修改)就可以再正式版中正常的运行。
在这里我们来讲一下怎样打开
数据库
,我们不赞同利用写字本或者
editplus
等文本编辑器来编写
asp.net
,所以本文的讲述全是在
VS.NET
开发工具上的。
建立一个新的数据库连接,首先我们从工具箱工双击
OleDbConnection
或者
双击
SqlConnection
如图所示
注意:
OleDbConnection
和
SqlConnection
的区别在于:
OleDbConnection
适合于连接任何类型的数据库(如
Oracle
,
SQL Server
,
ACCESS
等等),而
SqlConnection
是专门用来连接
SQL Server(MS SQL)
数据库的,据说效率比
OleDbConnection
高。如果你的数据库是
MS SQL
那么你就双击
SqlConnection
吧,其他数据库就用
OleDbConnection
吧。同样的道理
SqlDataAdapter,SqlCommand
是专门用于
(MS SQL)
数据库的,而
OleDbDataAdapter, OleDbCommand
适用于所有的数据库,如果你双击的是
SqlConnection
,那么在今后的数据库操作中你只能用
SqlDataAdapter,SqlCommand
,同样的道理如果你双击的是
OleDbConnection
,那么在今后的数据库操作中你只能用
OleDbDataAdapter, OleDbCommand
。在这里我们选择
OleDbConnection
。
当我们双击
OleDbConnection
后在窗口的下端将会出现一个名为
oleDbConnection1
的数据库连接源
我们可以在属性窗口改变
oleDbConnection1
的名称为
MyConnection,
连接数据库在关键的步骤为:从上图中的
ConnctionStr
中选择
<
新建连接…
>
然后将会弹出如下窗口:
选择好数据库的类型
“下一步”后
选择数据库的正确位置
如下图
(测试连接
成功后)单击确定,然后(双击编辑窗口任意空白位置)打开对应的
cs
文件,将会看到程序中自动加入了
protected System.Data.OleDb.OleDbConnection MyConnection;
代码
而且在
private void InitializeComponent()
中加入了
this.MyConnection = new System.Data.OleDb.OleDbConnection();
//
// MyConnection
//
this.MyConnection.ConnectionString = @"Provider=SQLOLEDB.1;Persist Security
Info=False;User ID=sa;Initial Catalog=house;Data Source=CYH;Use Procedure
for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=CYH;Use
Encryption for Data=False;Tag with column collation when possible=False";
//
现在要打开数据库变得很简单了,你只要使用
MyConnection.Open(); //
数据库就打开了
MyConnection.Close();//
关闭数据库
如你可以在
private void Page_Load(object sender, System.EventArgs e)
打开数据库
private void Page_Load(object sender, System.EventArgs e)
{
MyConnection.Open();
//
在此处放置用户代码对数据库进行增加、删除、修改、查询等操作
MyConnection.Close();
}