问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

SqlDataAdapter用法

发布网友 发布时间:2022-04-07 20:03

我来回答

2个回答

懂视网 时间:2022-04-08 00:25

  SqlDataAdapter常用于从数据库中返回一个结果集时。

  常用操作:

  Fill();

  示例:

 
 static void Main(string[] args)
 {
  string str = "server=CZZ;database=Test;uid=sa;pwd=123;Asynchronous Processing=true";
  SqlConnection conn = new SqlConnection(str); 
  string strSql = "SELECT * FROM Person";
  DataSet ds = new DataSet();
  SqlDataAdapter da = new SqlDataAdapter(strSql, conn);
  da.TableMappings.Add("Table","Person"); //指定原表数据与DataTable的映射关系
  da.Fill(ds,"Person");  //将数据填充到指定的DataTable
 
  foreach (DataRow dr in ds.Tables["Person"].Rows)
  {
  Console.WriteLine(dr["Id"].ToString() + dr["Name"].ToString() + dr["Age"].ToString());
  }

  //当然也可以直接Fill,DataTable
  DataTable dt = new DataTable();
  da.Fill(dt); //当然Fill两次这里会有问题
  foreach (DataRow dr in dt.Rows)
  {
  Console.WriteLine(dr["Id"].ToString() + dr["Name"].ToString() + dr["Age"].ToString());
  }

  Console.ReadKey();
 }
 

  1、多次开启关闭连接的问题

  也许我们已经留意到,使用SqlDataAdapter 不需要打开和关闭数据库连接。如果调用SqlDataAdapter的Fill方法,并且其SelectCommand属性的SqlConnection是关闭状态,则SqlDataAdapter会自动打开它,然后提交查询,获取结果,最后关闭连接。如果在调用Fill方法前,SqlConnection是打开的,则查询执行完毕后,SqlConnection 还将是打开的,也就是说SqlDataAdapter会保证SqlConnection的状态恢复到原来的情形。   看来SqlDataAdapter还是非常人性化的。但是这样会产生一个问题。假如数据库连接原本是关闭的,在查询的时候并没有打开,而直接Fill了两次,这样会导致数据库连接被打开和关闭了两次。这样是会影响效率的。在调用Fill时各打开和关闭了一次。   为了避免多次打开和关闭数据库连接,我们可以这样:

  cn.Open();
  da.Fill(ds,"Person");
  da.Fill(dt);
  cn.Close();

  2、多次调用Fill方法需要注意数据重复和有效更新数据的问题

  假如我们多次调用了Fill方法Fill同一个DataTable

  da.Fill(ds,"Customers");
  …….
  da.Fill(ds,"Customers");

  通过两次调用Fill方法,SqlDataAdapter执行两次查询,并两次将查询结果保存到DataSet中,第一次调用在DataSet中创建了一个名为Customers的新表。第二次调用Fill方法将查询的结果追加到DataSet中的同一个表中,因此,每个客户的信息将在DataSet中出现两次!当然,如果数据库管理员对Customers表定义了主键,则SqlDataAdapter在天成DataTable时,会判断重复行,并自动丢弃掉旧的值。

  考虑一下,假定一个特定客户在第一次调用Fill方法时,存储于数据库中,那么SqlDataAdapter会将其添加到新建的DataTable中。如果后来这个客户被删除了,那么第二次调用Fill方法时,SqlDataAdapter将不会在查询结果中找到该客户信息,但是它也不会将客户信息从DataSet中删除。这就导致了数据更新的问题。

   InsertCommand

技术分享
 static void Main(string[] args)
 {
  //INSERT实例,好复杂
  string str = "server=CZZ;database=Test;uid=sa;pwd=123;Asynchronous Processing=true";
  SqlConnection conn = new SqlConnection(str);

  DataTable dt = new DataTable();
  dt.Columns.Add("Id", typeof(int));
  dt.Columns.Add("Name", typeof(string));
  dt.Columns.Add("Age", typeof(int));
  SqlDataAdapter adapter = new SqlDataAdapter();
  //adapter.Fill(dt);

  dt.Rows.Add(new object[] { "5", "曹操", "29" });
  adapter.InsertCommand = new SqlCommand("INSERT INTO Person(Id,Name,Age) values(@ID,@Name,@Age)", conn);
  adapter.InsertCommand.Parameters.Add("Id", SqlDbType.Int);
  adapter.InsertCommand.Parameters.Add("Name", SqlDbType.VarChar);
  adapter.InsertCommand.Parameters.Add("Age", SqlDbType.Int);

  adapter.InsertCommand.Parameters["Id"].SourceColumn = "Id";
  adapter.InsertCommand.Parameters["Name"].SourceColumn = "Name";
  adapter.InsertCommand.Parameters["Age"].SourceColumn = "Age";

  adapter.InsertCommand.UpdatedRowSource = UpdateRowSource.None;
  //adapter.Fill(dt);
  if (dt.Rows.Count > 0)
  {
  adapter.Update(dt);
  }

  Console.ReadKey();
 }
技术分享

   UpdateCommand

技术分享
 static void Main(string[] args)
 {
  //Update实例
  string str = "server=CZZ;database=Test;uid=sa;pwd=123;Asynchronous Processing=true";

  using (SqlConnection conn = new SqlConnection(str))
  {
  conn.Open();
  DataSet ds = new DataSet();
  string sql = "select * from Person";
  SqlDataAdapter adapate = new SqlDataAdapter(sql, conn);
  adapate.Fill(ds, "Person");

  ds.Tables["Person"].Rows[0]["Name"] = "改改改";

  //动态生成的UpdateCommand必须要有主键
  SqlCommandBuilder builder = new SqlCommandBuilder(adapate);
  adapate.Update(ds, "Person");
  }
  Console.ReadKey();
 }
技术分享

  DeleteCommand

技术分享
 static void Main(string[] args)
 {
  //Delete实例
  string str = "server=CZZ;database=Test;uid=sa;pwd=123;Asynchronous Processing=true";

  using (SqlConnection conn = new SqlConnection(str))
  {
  DataSet ds = new DataSet();
  string sql = "SELECT * FROM Person";
  SqlDataAdapter adapter = new SqlDataAdapter(sql, conn);
  adapter.Fill(ds, "Person");
  adapter.DeleteCommand = new SqlCommand("DELETE FROM Person WHERE Id=@Id", conn);
  adapter.DeleteCommand.Parameters.Add("Id", SqlDbType.Int);
  adapter.DeleteCommand.Parameters["Id"].SourceColumn = "Id";
  //删除第一行
  ds.Tables["Person"].Rows[0].Delete();
  Console.WriteLine(ds.Tables["Person"].Rows.Count);
  adapter.Update(ds.Tables["Person"]);
  }

  Console.ReadKey();
 }

SqlDataAdapter类

标签:

热心网友 时间:2022-04-07 21:33

DataSet
作用:DataSet,DataAdapter读取数据。
问:什么是DataAdapter?
答:DataAdapter对象在DataSet与数据之间起桥梁作用

string strConn="uid=账号;pwd=密码;database=数据库;server=服务器";//SQL Server链接字符串
SqlConnection ConnSql=new SqlConnection (strConn); //Sql链接类的实例化
ConnSql.Open ();//打开数据库
string strSQL="SELECT * FROM 表名1 "; //要执行的SQL语句
SqlDataAdapter da=new SqlDataAdapter(strSQL,ConnSql); //创建DataAdapter数据适配器实例
DataSet ds=new DataSet();//创建DataSet实例
da.Fill(ds,"自定义虚拟表名");//使用DataAdapter的Fill方法(填充),调用SELECT命令
ConnSql.Close ();//关闭数据库
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
kmose正确使用方法? 单位高温防护欠缺致员工中暑如何对待 狗狗为什么爱看视频 360浏览器怎么设置倍速播放 ...先讲女主的灵魂飘荡了一段时间,然后重生,请问是那本? 拯救者散热器怎么开 电脑如何一键还原系统电脑一键还原怎么操作 神舟笔记本电脑怎么重新设置神舟战神bios恢复出厂设置 神舟电脑恢复出厂设置神舟战神怎么恢复原厂系统 水泥楼梯如何铺木楼梯 26岁徐璐玩另类混搭风,渔网袜配卫衣马丁靴,效果有多好? 蓝色卫衣下面搭配什么颜色的马丁靴好看呢? 跟随傅作义一同起义,和平解放北平的四位军长,后来怎么样了呢? 黑色马丁靴搭配连帽卫衣好看吗,再搭配什么裤子? 粉色马丁靴怎么搭配上衣和裤子啊?卫衣呢?高手进 所有锁屏提示全部开启了,来消息,微信还是不亮屏,vivonex手机 8.1.0系统 连长向商人伸了三根指头,竟使一位军长入狱,这是为何? 卫衣和马丁靴怎么搭配衣服 vivox30为什么停产了 红色卫衣黑色牛仔裤配卡其色马丁靴可以吗 卫衣可以搭配马丁靴吗? 卫衣卫裤可搭马丁靴吗? 贺维珍的介绍 VIVOX30停产了吗? 张国涛南下带走了多少军队 卫衣搭配马丁靴好看吗 vivo未root开不了机? vivo nex A不亮屏了是怎么回事电池什么的都没坏,插上充电器也不亮 国民革命军第31军的西北军 vivo nex a无法强制开机,有反应但是屏幕不亮,指示灯不亮,该怎么办? 男士马丁靴配束脚休闲裤和卫衣怎么样?过年穿合不合适? 王源上身卫衣下身牛仔裤,马丁靴恰到好处,除了马丁靴还能搭配哪种鞋子? 卫衣可以搭配BEFFON北风马丁靴吗? 短款百褶裙黑色搭配红色卫衣可以搭配杏色马丁靴吗? 白色卫衣搭配牛仔裤在搭配马丁靴背个黑包怎么样? 戴帽子卫衣适合搭配高跟短靴吗 假体隆胸需要多少钱? 蚂蚁链都为哪些行业服务了呀?有人知道吗? 干洗技术哪里学 假体丰胸手术费用多少钱,求高人指点~ 有人能简单说一下现在这些蚂蚁链 蜂核链是什么平台吗? 一加手机home键失效怎么办? 一加手机home键失效 姓陶 取什么名字好听!!! 一加one按键都没反应 姓陶的女名和男孩名(4,4)。 我的一加手机返回键失灵怎么办??? 取个名字,姓陶 高分急求!!! 一加手机按键失灵有什么解决办法 取名字 ,男孩,姓陶!