学习笔记——ADO.NET

绝地灬酷狼 2022-02-27 14:56 291阅读 0赞

连接数据库——Connection对象
Connection对象是一个连接对象,主要功能是建立于物理数据库的连接
SQL Server数据提供程序,位于System.Data.SqlClient命名空间
ODBC数据提供程序,位于System.Data.Odbc命名空间
OLEDB数据提供程序,位于System.Data.OleDb命名空间
Oracle数据提供程序,位于System.Data.OracleClient命名空间

  1. 连接数据库时,首先通过using System.Data.SqlClient来引用命名空间,连接数据库,
  2. 连接数据库后,通过调用SqlConnection对象的Open方法打开数据库。
  3. 关闭数据库可调用SqlConnectionClose方法或Dispose方法。
  4. 区别在于:Close用于关闭一个连接,此后可以用Open再次打开。Dispose不仅关闭一个
  5. 连接,而且还清理连接所占用资源。此后必须先重新连接数据库才能用Open
  6. 通过 **SqlConnection**对象的State属性判断数据库的连接状态
  7. 语法为: public override ConnectionState State \{get;\}
  8. 属性值:ConnectionState枚举
  9. ConnectionState枚举的值和说明如下:
  10. Broken 与数据库的连接中断。只有在连接打开之后才可能发生这种情况。可以关闭处于这种状态的连接,然后重新打开
  11. Closed 连接处于关闭状态
  12. Connecting 连接对象正在于数据源连接
  13. Executing 连接对象正在执行命令
  14. Fetching 连接对象正在检索数据
  15. Open 连接处于打开状态
  16. 实例:
  17. string ConStr="server=;database=db\_RFID;uid=sa;pwd=password";//分别为服务器、数据库名、用户名、密码
  18. SqlConnection conn=new SqlConnection(ConStr);
  19. conn.Open();
  20. if(conn.State==ConnectionState.Open)
  21. label1.Text="成功打开!";
  22. conn.Close();

执行SQL语句——Command对象
Command对象是一个数据命令对象,主要功能是想数据库发送查询、更新、删除、修改操作的SQL语句
Command对象有3个重要属性,分别是Connection、CommandText、CommandType属性。Connection用于设置SqlCommand
使用的SqlConnection。CommandText属性用于设置要对数据源执行的SQL语句或存储过程。CommandType用于设置或指定
CommandText的类型。
CommandType属性的值是CommandType枚举值,枚举成员如下:
StoredProcedure:存储过程的名称
TableDirect:表的名称
Text:SQL文本命令
实例:
SqlConnection conn;
conn=new SqlConnection(“server=;database=db_RFID;uid=sa;pwd=password”);
conn.Open();
SqlCommand cmd=new SqlCommand();
cmd.Connection=conn;
cmd.CommandText=”select count(*)from tb_test”;
cmd.CommandType=CommandType.Text;
SqlCommand对象中几种执行SQL语句的方法:
ExecuteNonQuery方法:
执行SQL语句,并返回受影响的行数,在使用SqlCommand向数据库发送增、删、改命令时,
通常使用ExecuteNonQuery方法执行发送的SQL语句。
语法:
public override int ExecuteNonQuery();
实例:
int i=Convert.ToInt32(cmd.ExecuteNonQuery());
label2.Text=”共有”+i.ToString()+”行发生变化。”;
ExecuteReader方法:
执行SQL语句,并生成一个包含数据的SqlDataReader对象的实例
语法:
public SqlDataReader ExecuteReader();
实例:
SqlDataReader sdr=cmd.ExecuteReader();
//sdr包含上面的select语句所挑选出的所有数据
while(sdr.Read())
listView1.Items.Add(sdr[1].ToString());
ExecuteScalar方法:
执行SQL语句,返回结果集中的第一行的第一列,若结果集为空则为空引用
语法:
public override Object ExecuteScalar();
实例:
int i=Convert.ToInt32(cmd.ExecuteScalar());
//利用该方法获取指定表中的数据数量

读取数据——DataReader对象
DataReader对象是数据读取器对象,提供只读向前的游标
在使用DataReader对象读取数据时,可以使用ExecuteReader方法,根据SQL语句的结果创建一个 SqlDataReader对象
判断查询结果中是否有值:
通过SqlDataReader对象的HasRows属性,如果SqlDataReader包含一行或多行,则返回true,否则返回false
实例:
SqlDataReader sdr=cmd.ExecuteReader();
sdr.Read();
if(sdr.HasRows)MessageBox.Show(“数据表有值!”);
读取数据:
如果要读取数据表中的数据,通过ExecuteReader方法,根据SQL语句创建一个SqlDataReader对象后,再调用
SqlDataReader对象的Read方法读取数据。Read方法使SqlDataReader前进到下一条记录,SqlDataReader的默认
位置在第一条记录面前
注意:
对于每个关联的SqlConnection,一次只能打开一个SqlDataReader,在第一个关闭之前,打开另一个的
任何尝试都会失败。
实例:
SqlDataReader sdr=cmd.ExecuteReader();
sdr.Read();
sdr.Close();

数据适配器——DataAdapter对象
DataAdapter对象是一个数据适配器对象,是DataSet与数据源之间的桥梁。
DataAdapter提供4个属性,实现用于与数据源之间的互通。
SelectCommand属性:向数据库发送查询SQL语句。
DeleteCommand属性:向数据库发送删除SQL语句。
InsertCommand属性:向数据库发送插入SQL语句。
UpdateCommand属性:向数据库发送更新SQL语句。
对数据库进行操作时,只要将这四个属性设置为相应 的SQL语句即可。
DataAdapter对象中还有几个主要的方法:
Fill方法用数据填充DataSet
语法:
public int Fill(DataSet dataset,string srcTable);
dataSet:要用记录和框架填充的DataSet
srcTable:用于表映射的源表的名称
返回值:已在DataSet中成功添加或刷新的行数,这不包括受不返回行的语句影响的行
Update方法更新数据库:
DataAdapter将调用DeleteCommand、InsertCommand以及UpdateCommand属性。
语法:
public int Update(DataTable dataTable);
dataTable:用于更新数据源的DataSet
返回值:DataSet中成功更新的行数
通过DataAdapter对象的Fill方法填充DataSet数据集,Fill方法使用Select语句从数据源中检索数据。
与Select命令关联的Connection对象必须有效,但不需要将其打开。
实例:
SqlConnection conn=new SqlConnection(“server=.;database=db_15;uid=sa;pwd=”);
SqlCommand cmd=new SqlCommand(“select * from tb_command”,conn);
SqlDataAdapter sda=new SqlDataAdapter();
sda.SelectCommand=cmd;
DataSer ds=new DataSet();
sda.Fill(ds,”cs”);
使用DataAdapter对象的Update方法,可以将DataSet中修改过的数据及时更新到数据库中。
在使用Update方法之前,要实例化一个CommandBuilder类,它能自动根据DataAdapter的SelectCommand
的SQL语句判断其他的InsertCommand、UpdateCommand和DeleteCommand。这样就不用设置DataAdapter
的InsertCommand、UpdateCommand和DeleteCommand属性,直接使用DataAdapter的Update方法来更新DataSet
DataTable或DataRow数组即可。
实例:
sda,Fill(ds,”cs”);//同上面的接上来

  1. DataTable dt=ds.Tables\["cs"\];
  2. sda.FillSchema(dt,SchemaType.Mapped);//把表结构加载到tb\_command表中
  3. DataRow dr=dt.Rows.Find(txtNo.Text);//创建一个DataRow
  4. //设置DataRow中的值
  5. dr\["姓名"\]=txtName.Text.Trim();
  6. dr\["性别"\]=txtName.Text.Trim();
  7. dr\["年龄"\]=txtName.Text.Trim();
  8. dr\["奖金"\]=txtName.Text.Trim();
  9. SqlCommandBuilder cmdbuilder=new SqlCommandBuilder(sda);
  10. sda.Update(dt);

数据集——DataSet对象
DataSet对象就像存放于内存中的一个小型数据库,它可以包含数据表、数据列、数据行、视图、约束以及关系
通常DataSet的数据来源于数据库或XML,为了从数据库中获取数据,需要用到DataAdapter
实例:
conn=new SqlConnection(“server=.;database=db_15;uid=sa;pwd=”);
DataSet ds=new DataSet();
SqlDataAdapter sda=new SqlDataAdapter(“select * from tb_test”,conn);
sda.Fill(ds);//使用Fill方法填充DataSet
合并DataSet内容
可以使用DataSet的Merge方法将DataSet、DataTable和DataRow数组的内容并入现有的DataSet中。
Merge方法将指定的DataSet及其架构与当前的DataSet合并,在此过程中,将根据给定的参数保留或放弃在当前
DataSet中的更改并处理不兼容的架构
语法:
public void Merge(DataSet dataSet,bool preserveChanges,MissingSchemaAction missingSchemaAction)
dataSet:其数据和将被合并到DataSet中
preserveChanges:要保留当前的DataSet中的修改,则为true,否则为false
missingSchemaAction:这是一个枚举值,成员如下:
Add 添加必须的列以完成架构
AddWithKey 添加必须的列和主键信息以完成架构,用户可以在每个DataTable上显式设置主键约束
这将确保对与现有的记录匹配的传入记录进行更新,而不是追加
Error 如果缺少指定的列映射,则生成InvalidOperationException
Ignore 忽略额外列
实例:
conn=new SqlConnection(“server=.;database=db_15;uid=sa;pwd=”);
DataSet ds=new DataSet();
DataSet ds1=new DataSet();
SqlDataAdapter sda=new SqlDataAdapter(“select * from tb_test”,conn);
sda.Fill(ds);
SqlDataAdapter sda1=new SqlDataAdapter(“select * from tb_man”,conn);
sda1.Fill(ds);
ds1.Merge(ds,true,MissingSchemaAction.AddWithKey);
复制DataSet内容
为了在不影响原始数据的情况下使用数据,或者使用DataSet中数据的子集,可以创建DataSet的副本
可以使用DataSet对象的Copy方法创建包含架构和数据的DataSet的原样副本
语法:
public DataSet Copy();
返回值:新的DataSet,具有与该DataSet相同的结构和数据
实例:
conn=new SqlConnection(“server=.;database=db_15;uid=sa;pwd=”);
DataSet ds=new DataSet();
SqlDataAdapter sda=new SqlDataAdapter(“select * from tb_test”,conn);
sda.Fill(ds);
DataSet ds1=ds.Copy();

发表评论

表情:
评论列表 (有 0 条评论,291人围观)

还没有评论,来说两句吧...

相关阅读

    相关 学习笔记

    \ajax: 1、概念:异步的JavaScript 和 xml 1.1异步和同步:客户端和服务器端相互通信的基础上 \客户端必须等待服务器端的响应。在等待的期间客户