学习笔记——ADO.NET 绝地灬酷狼 2022-02-27 14:56 251阅读 0赞 连接数据库——Connection对象 **Connection**对象是一个连接对象,主要功能是建立于物理数据库的连接 SQL Server数据提供程序,位于System.Data.SqlClient命名空间 ODBC数据提供程序,位于System.Data.Odbc命名空间 OLEDB数据提供程序,位于System.Data.OleDb命名空间 Oracle数据提供程序,位于System.Data.OracleClient命名空间 连接数据库时,首先通过using System.Data.SqlClient来引用命名空间,连接数据库, 连接数据库后,通过调用SqlConnection对象的Open方法打开数据库。 关闭数据库可调用SqlConnection的Close方法或Dispose方法。 区别在于:Close用于关闭一个连接,此后可以用Open再次打开。Dispose不仅关闭一个 连接,而且还清理连接所占用资源。此后必须先重新连接数据库才能用Open 通过 **SqlConnection**对象的State属性判断数据库的连接状态 语法为: public override ConnectionState State \{get;\} 属性值:ConnectionState枚举 ConnectionState枚举的值和说明如下: Broken 与数据库的连接中断。只有在连接打开之后才可能发生这种情况。可以关闭处于这种状态的连接,然后重新打开 Closed 连接处于关闭状态 Connecting 连接对象正在于数据源连接 Executing 连接对象正在执行命令 Fetching 连接对象正在检索数据 Open 连接处于打开状态 实例: string ConStr="server=;database=db\_RFID;uid=sa;pwd=password";//分别为服务器、数据库名、用户名、密码 SqlConnection conn=new SqlConnection(ConStr); conn.Open(); if(conn.State==ConnectionState.Open) label1.Text="成功打开!"; 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");//同上面的接上来 DataTable dt=ds.Tables\["cs"\]; sda.FillSchema(dt,SchemaType.Mapped);//把表结构加载到tb\_command表中 DataRow dr=dt.Rows.Find(txtNo.Text);//创建一个DataRow //设置DataRow中的值 dr\["姓名"\]=txtName.Text.Trim(); dr\["性别"\]=txtName.Text.Trim(); dr\["年龄"\]=txtName.Text.Trim(); dr\["奖金"\]=txtName.Text.Trim(); SqlCommandBuilder cmdbuilder=new SqlCommandBuilder(sda); 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();
相关 「学习笔记」学习笔记合集 可以点击 [https://www.cnblogs.com/hongzy/tag/%E7%AC%94%E8%AE%B0/][https_www.cnblogs.com_hong 淩亂°似流年/ 2023年06月05日 12:48/ 0 赞/ 17 阅读
相关 学习笔记 学习笔记 sudo adduser lilei sudo usermod -G sudo lilei sudo deluse 客官°小女子只卖身不卖艺/ 2022年11月26日 12:58/ 0 赞/ 26 阅读
相关 学习笔记 \ajax: 1、概念:异步的JavaScript 和 xml 1.1异步和同步:客户端和服务器端相互通信的基础上 \客户端必须等待服务器端的响应。在等待的期间客户 深藏阁楼爱情的钟/ 2022年10月29日 13:24/ 0 赞/ 279 阅读
相关 学习笔记 一. CSS 如何实现文字的垂直居中 1. 二.问题记录 1.创建新的JSP页面的时候报错:The superclass “javax.servlet.http.H 超、凢脫俗/ 2022年08月20日 09:30/ 0 赞/ 143 阅读
相关 【学习笔记】git学习笔记 使用git的好处 可以保存每个版本,只要在每个版本做完后进行上传 ![这里写图片描述][70] 可以异地读取更新 爱被打了一巴掌/ 2022年05月14日 09:10/ 0 赞/ 403 阅读
相关 学习笔记 我的第一天学习c\ 1、c\学习网址 [https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide 矫情吗;*/ 2022年05月08日 06:16/ 0 赞/ 323 阅读
相关 学习笔记 测试 ORM JPA EJB JPQL MOM JMS ORM 对象关系映射 英语:Object Relational M 爱被打了一巴掌/ 2022年02月16日 01:57/ 0 赞/ 394 阅读
相关 [笔记] Docker 学习笔记 1. 什么是 Docker > 官方文档:[链接][Link 1],中文文档:[链接][Link 2] Docker 属于 Linux 容器的一种封装,提供简单易用的容 缺乏、安全感/ 2021年11月27日 02:01/ 0 赞/ 588 阅读
相关 学习笔记 1、js如何将136分钟转化为几小时,几分钟 return (Math.floor(minutes/60) + "小时" + (minutes%60) + "分" 爱被打了一巴掌/ 2021年07月25日 23:46/ 0 赞/ 1049 阅读
还没有评论,来说两句吧...