热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

C#中SqlDataAdapter的使用

SqlDataAdapter概述SqlDataAdapter是DataSet和SQLServer之间的桥接器,用于检索和保存数据。SqlDataAdapter通过对数据源使用适当的Transact-SQL语句映射Fill(它可更改DataSet中的数据以匹配数据源中的数据)和Update(它可更改数据源中的数据以匹配Data

SqlDataAdapter概述 SqlDataAdapter是 DataSet和 SQL Server之间的桥接器,用于检索和保存数据。SqlDataAdapter通过对数据源使用适当的Transact-SQL语句映射 Fill(它可更改DataSet中的数据以匹配数据源中的数据)和 Update(它可更改数据源中的数据以匹配 Data

  SqlDataAdapter概述

  SqlDataAdapter是 DataSet和 SQL Server之间的桥接器,用于检索和保存数据。SqlDataAdapter通过对数据源使用适当的Transact-SQL语句映射 Fill(它可更改DataSet中的数据以匹配数据源中的数据)和 Update(它可更改数据源中的数据以匹配 DataSet中的数据)来提供这一桥接。当SqlDataAdapter填充 DataSet时,它为返回的数据创建必需的表和列(如果这些表和列尚不存在)。

  我们可以通过以下三种方法来创建SqlDataAdapter对象:

  使用方法

  1、通过连接字符串和查询语句

  string strCOnn="uid=账号;pwd=密码;database=数据库;server=服务器";//SQL Server链接字符串

  strSql="SELECT * FROM 表名";

  SqlDataAdapter da=new SqlDataAdapter(strSql,strConn);

  DataSet ds=new DataSet();//创建DataSet实例

  da.Fill(ds,"自定义虚拟表名");//使用DataAdapter的Fill方法(填充),调用SELECT命令

  这种方法有一个潜在的缺陷。假设应用程序中需要多个SqlDataAdapter对象,用这种方式来创建的话,会导致创建每个SqlDataAdapter时,都同时创建一个新的SqlConnection对象,方法二可以解决这个问题

  2、通过查询语句和SqlConnection对象来创建

  string strCOnn="uid=账号;pwd=密码;database=数据库;server=服务器";//SQL Server链接字符串

  SqlConnection cOnn=new SqlConnection(strConn);

  string strSql="SELECT * FROM 表名";

  SqlDataAdapter da = new SqlDataAdapter(strSql, conn);

  DataSet ds=new DataSet();//创建DataSet实例

  da.Fill(ds,"自定义虚拟表名");//使用DataAdapter的Fill方法(填充),调用SELECT命令

  3、通过SqlCommand对象来创建

  string strCOnn="uid=账号;pwd=密码;database=数据库;server=服务器";//SQL Server链接字符串

  SqlConnection cOnnSql=new SqlConnection (strConn); //Sql链接类的实例化

  connSql.Open ();//打开数据库

  //使用SqlDataAdapter时没有必要从Connection.open()打开,

  //SqlDataAdapter会自动打开关闭它。

  string strSql = "SELECT * FROM 表名"; //要执行的SQL语句

  SqlCommand cmd=new SqlCommand(strSql,connsql);

  SqlDataAdapter da=new SqlDataAdapter(cmd); //创建DataAdapter数据适配器实例

  DataSet ds=new DataSet();//创建DataSet实例

  da.Fill(ds,"自定义虚拟表名");//使用DataAdapter的Fill方法(填充),调用SELECT命令

  ConnSql.Close ();//关闭数据库

  SqlDataAdapter da=new SqlDataAdapter(strSQL,ConnSql); //创建DataAdapter数据适配器实例DataSet ds=new DataSet();//创建DataSet实例da.Fill(ds,"自定义虚拟表名");//使用DataAdapter的Fill方法(填充),调用SELECT命令ConnSql.Close ();//关闭数据库

  注意

  如果只需要执行SQL语句或SP,就没必要用到DataAdapter ,直接用SqlCommand的Execute系列方法就可以了。sqlDataadapter的作用是实现Dataset和DB之间的桥梁:比如将对DataSet的修改更新到数据库。

  SqlDataAdapter的UpdateCommand的执行机制是:当调用SqlDataAdapter.Update()时,检查DataSet中的所有行,然后对每一个修改过的Row执行SqlDataAdapter.UpdateCommand ,也就是说如果未修改DataSet中的数据,SqlDataAdapter.UpdateCommand不会执行。

  使用要点

  1、SqlDataAdapter内部通过SqlDataReader获取数据,而默认情况下SqlDataReader不能获知其查询语句对应的数据库表名,

  所以下面的代码:

  string strCOnn= "uid=账号;pwd=密码;database=数据库;server=服务器";//SQL Server链接字符串

  strSql="SELECT * FROM 表名";

  SqlDataAdapter da = new SqlDataAdapter(strSql,strConn);

  DataSet ds = new DataSet();

  da.Fill(ds);

  会在DataSet中创建一个新的DataTable,这个新的DataTable会拥有名为CustomerID和CompanyName 列,但是DataTable对象的名称是Table,而不是我们希望的Customers。

  这个问题,可以通过添加TableMapping来解决:

  string strCOnn="uid=账号;pwd=密码;database=数据库;server=服务器";//SQL Server链接字符串

  strSql="SELECT * FROM 表名";

  SqlDataAdapter da=new SqlDataAdapter(strSQL,strConn);

  da.TableMappings.Add("Table",,"Customers"); // 设置对象名称

  DataSet ds=new DataSet();

  da.Fill(ds);

  其实最简洁的方法是通过使用Fill方法的重载,通过指定DataTable,像这样:

  SqlDataAdapter.Fill(DataSet,"MyTableName");

  这样就可以不必使用TableMappings集合。

  2、在使用Fill方式时,可以指定DataTable,而不是DataSet:

  string strCOnn="uid=账号;pwd=密码;database=数据库;server=服务器";//SQL Server链接字符串

  strSql="SELECT * FROM 表名";

  SqlDataAdapter da = new SqlDataAdapter(strSql, strConn);

  DataTable tbl=new DataTable( );

  da.Fill(tbl);

  3、注意打开和关闭连接的处理

  在调用SqlCommand对象执行sql命令之前,需要保证与该对象关联的SqlConnection对象时打开的,否则SqlCommand的方法执行时将引发一个异常,但是我们在上面的代码中看到,SqlDataAdapter没有这样的要求。

  如果调用SqlDataAdapter的Fill方法,并且其SelectCommand属性的SqlConnection是关闭状态,则SqlDataAdapter会自动打开它,然后提交查询,获取结果,最后关闭连接。如果在调用Fill方法前,SqlConnection是打开的,则查询执行完毕后,SqlConnection还将是打开的,也就是说SqlDataAdapter会保证SqlConnection的状态恢复到原来的情形。

  这有时会导致性能问题,需要注意,例如下面的代码:

  string strCOnn="uid=账号;pwd=密码;database=数据库;server=服务器";//SQL Server链接字符串

  SqlConnection cOnn=new SqlConnection(strConn);

  SqlDataAdapter daCustomers,daOrders;

  strSql="SELECT * FROM Customers";

  daCustomers = new SqlDataAdapter(strSql, conn);

  strSql="SELECT * FROM Orders";

  daOrders=new SqlDataAdapter(strSql, conn);

  DataSet ds=new DataSet();

  daCustomers.Fill(ds,"Customers");

  daOrders.Fill(ds,"Orders");

推荐阅读
  • 如何解决XP系统启动时出现CPU风扇错误警告?
    在使用XP系统的计算机中,部分用户反映在启动过程中会频繁遇到“CPU Fan Error”警告,并提示按F1键进入设置。这一问题不仅影响用户体验,还可能对硬件造成潜在风险。本文将详细介绍如何诊断和解决这一常见故障,确保系统稳定运行。 ... [详细]
  • PHP开发人员薪资水平分析:工程师平均工资概况
    PHP开发人员薪资水平分析:工程师平均工资概况 ... [详细]
  • HTML5 WebSocket技术详解与应用前景
    WebSocket 是 HTML5 引入的一种在单一 TCP 连接上实现全双工通信的技术。作为一种高效且低延迟的协议,WebSocket 允许服务器和客户端之间进行实时双向数据交换。该技术不仅简化了开发过程,还显著提升了 Web 应用的性能和用户体验。未来,随着更多应用场景的探索,WebSocket 在实时通信领域的应用前景将更加广阔。 ... [详细]
  • CentOS 7环境下Jenkins的安装与前后端应用部署详解
    CentOS 7环境下Jenkins的安装与前后端应用部署详解 ... [详细]
  • 在MySQL中更新密码时,首先需要在DOS窗口中切换到mysql安装目录,并使用`--skip-grant-tables`参数启动MySQL服务,以跳过权限表验证。接着,在MySQL命令行中执行相应的SQL语句来设置新密码。完成密码更新后,重启MySQL服务以使更改生效。此外,对于电脑快捷方式的修改,可以通过右键点击快捷方式,选择“属性”,在弹出的窗口中进行路径或目标的修改,最后点击“应用”和“确定”保存更改。 ... [详细]
  • 穿越火线游戏时频繁出现“CF out of memory”错误,我的电脑配置正常,为何还会遇到此问题?求专业人士解答。
    穿越火线游戏时频繁出现“CF out of memory”错误,我的电脑配置正常,为何还会遇到此问题?求专业人士解答。 ... [详细]
  • 本文详细解析了MySQL中的多表联合查询技术,涵盖了内连接、外连接和交叉连接三种主要类型。通过具体示例,深入探讨了每种连接方式的使用场景和实现方法,帮助读者全面掌握SQL查询技巧,提升数据处理能力。 ... [详细]
  • 如何在Mac上构建高效的本地服务器环境
    在Mac上构建高效的本地服务器环境,首先需要了解基本步骤:1. 配置目录基础;2. 启动Apache服务;3. 添加自定义文档至本地服务器;4. 查看自定义效果。此外,还可以通过手机或其他电脑访问本机服务器,以确保跨设备的兼容性和调试效果。Mac系统自带的Apache服务为本地开发提供了便捷的工具,本文将详细介绍每个步骤的具体操作方法。 ... [详细]
  • Windows 10系统对Intel服务器的影响:来自微软官网的下载选项分析 ... [详细]
  • Linux入门教程第七课:基础命令与操作详解
    在本课程中,我们将深入探讨 Linux 系统中的基础命令与操作,重点讲解网络配置的相关知识。首先,我们会介绍 IP 地址的概念及其在网络协议中的作用,特别是 IPv4(Internet Protocol Version 4)的具体应用和配置方法。通过实际操作和示例,帮助初学者更好地理解和掌握这些基本技能。 ... [详细]
  • 2016-2017学年《网络安全实战》第三次作业
    2016-2017学年《网络安全实战》第三次作业总结了教材中关于网络信息收集技术的内容。本章主要探讨了网络踩点、网络扫描和网络查点三个关键步骤。其中,网络踩点旨在通过公开渠道收集目标信息,为后续的安全测试奠定基础,而不涉及实际的入侵行为。 ... [详细]
  • TypeScript 实战分享:Google 工程师深度解析 TypeScript 开发经验与心得
    TypeScript 实战分享:Google 工程师深度解析 TypeScript 开发经验与心得 ... [详细]
  • 利用CSV Data Set Config实现JMeter参数化测试的详细指南
    本文详细介绍了如何使用JMeter中的CSV Data Set Config元素来实现参数化测试。通过该配置元件,用户可以轻松地从外部CSV文件中读取数据,从而提高测试的灵活性和可扩展性。文章不仅提供了具体的配置步骤,还结合实际案例,展示了如何在不同的测试场景中应用这一功能,帮助读者更好地理解和掌握JMeter参数化测试的技巧。 ... [详细]
  • 【Linux】CentOS 7 远程连接指南:高效安全的远程管理方法
    在 CentOS 7 中实现高效且安全的远程管理,本文详细介绍了如何检查和安装配置 OpenSSH。首先,通过 `yum list installed` 命令检查系统是否已安装 OpenSSH,若未安装,则使用 `yum install openssh-server` 进行安装。随后,配置 SSH 服务以确保其安全性和稳定性,包括修改默认端口、禁用 root 登录等关键步骤。此外,还提供了常见问题的解决方案,帮助用户顺利进行远程连接。 ... [详细]
  • 在过去,我曾使用过自建MySQL服务器中的MyISAM和InnoDB存储引擎(也曾尝试过Memory引擎)。今年初,我开始转向阿里云的关系型数据库服务,并深入研究了其高效的压缩存储引擎TokuDB。TokuDB在数据压缩和处理大规模数据集方面表现出色,显著提升了存储效率和查询性能。通过实际应用,我发现TokuDB不仅能够有效减少存储成本,还能显著提高数据处理速度,特别适用于高并发和大数据量的场景。 ... [详细]
author-avatar
苦咖啡青柠檬
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有