SqlDataAdapter中的Fill方法(2)

王者荣耀AI绝悟如何选英雄? 王者荣耀AI绝悟如何选英雄? 【抢射手?抢中单位?「绝悟」在打王者荣耀时是如何选英雄的?】 腾讯 AI Lab 开发的 AI 智能体「绝悟」已让王者峡谷不再只是人类召唤师的竞技场,而且这个 AI 战队在上月底进化成了「完全体」。在一局完整的比赛中,英雄选择阶段是至关重要的(比如五射手或五法师阵容会有官方劝退)。 近日,腾讯 AI Lab 和上海交通大学发布的一篇论文介绍了绝悟的英雄选择策略:Ju... 阅读详情

上一篇中我们可以看出Fill方法最后都调用FillFromCommand和FillFromReader方法。
那我们接着探讨FillFromCommand方法
private int FillFromCommand(object data, int startRecord, int maxRecords, string srcTable, IDbCommand command, CommandBehavior behavior)
{
      IDbConnection connection1 = DbDataAdapter.GetConnection(command, "Fill");//返回connection
      ConnectionState state1 = ConnectionState.Open;
      if (MissingSchemaAction.AddWithKey == base.MissingSchemaAction)

    //添加必需的列和主键信息以完成架构。

      {
            behavior |= CommandBehavior.KeyInfo;
      }
      int num1 = 0;
      try
      {
            try
            {
                  DbDataAdapter.QuietOpen(connection1, out state1);//打开连接
                  using (IDataReader reader1 = command.ExecuteReader(behavior | CommandBehavior.SequentialAccess))//读取数据
                  {
                        if (data is DataTable)
                        {
                              num1 = this.Fill((DataTable) data, reader1);//这个方法我们已经

    //说过它最后调用FillFromReader(dataTable, null, dataReader, 0, 0, null, null);

                        }
                        else
                        {
                              num1 = this.Fill((DataSet) data, srcTable, reader1, startRecord, maxRecords);

//这个方法最后调用  return this.FillFromReader(dataSet, srcTable, dataReader,

//startRecord, maxRecords, null, null);

                        }
                  }
            }
            finally
            {
                  DbDataAdapter.QuietClose(connection1, state1);//关闭连接
            }
      }
      catch
      {
            throw;
      }
      return num1;
}
这是就不难看出FillFromCommand其实也是在调用了FillFromReader,也就是说Fill方法的所有操作将由FillFromReader方法来完成。

看看FillFromReader方法:
internal int FillFromReader(object data, string srcTable, IDataReader dataReader, int startRecord, int maxRecords, DataColumn parentChapterColumn, object parentChapterValue)
{
      int num1 = 0;
      int num2 = 0;//schemaCount
Label_0004:
      if (0 < dataReader.FieldCount)
      {
            SchemaMapping mapping1 = this.FillSchemaMappingTry(data, srcTable, dataReader, num2, parentChapterColumn, parentChapterValue);//创建结构映射
            num2++;
            if (((mapping1 != null) && (mapping1.DataValues != null)) && (mapping1.DataTable != null))
            {
                  try
                  {
                        mapping1.DataTable.BeginLoadData();//加载数据时关闭通知、索引维护和约束
                        try
                        {
                              if ((1 == num2) && ((0 < startRecord) || (0 < maxRecords)))
                              {
                                    num1 = this.FillLoadDataRowChunk(mapping1, startRecord, maxRecords);//填充从

//startRecord开始的maxRecords条记录,并返回记录个数
                              }
                              else
                              {
                                    int num3 = this.FillLoadDataRow(mapping1);//填充数据
                                    if (1 == num2)
                                    {
                                          num1 = num3;
                                    }
                              }
                        }
                        finally
                        {
                              mapping1.DataTable.EndLoadData();//数据加载后打开通知、索引维护和约束。
                        }
                  }
                  catch
                  {
                        throw;
                  }
            }
      }
      if (!this.FillNextResult(dataReader))//判断dataReader中是否还有记录
      {
            return num1;
      }
      goto Label_0004;
}
 其实到这里我们已经对fill有个总体了解,首先不管fill重载多少次它都是最后调用FillFromReader方法,在FillFromReader中先创建结构映射,然后填充数据。
 接着看看结构影射,这个很复杂,请朋友们多多指教。
//结构影射
private SchemaMapping FillSchemaMappingTry(object data, string srcTable, IDataReader dataReader, int schemaCount, DataColumn parentChapterColumn, object parentChapterValue)
{
      SchemaMapping mapping1 = null;
      if (this.hasFillErrorHandler)
      {
            try
            {
                  mapping1 = this.FillSchemaMapping(data, srcTable, dataReader, schemaCount, parentChapterColumn, parentChapterValue);
            }
            catch (Exception exception1)
            {
                  this.FillErrorHandler(exception1, null, null);
            }
      }
      else
      {
            mapping1 = this.FillSchemaMapping(data, srcTable, dataReader, schemaCount, parentChapterColumn, parentChapterValue);
      }
      return mapping1;
}
//FillSchemaMapping
private SchemaMapping FillSchemaMapping(object data, string srcTable, IDataReader dataReader, int schemaCount, DataColumn parentChapterColumn, object parentChapterValue)
{
      SchemaMapping mapping1 = new SchemaMapping(this, dataReader, MissingSchemaAction.AddWithKey == base.MissingSchemaAction);//创建SchemaMapping实例
               //成员名称 说明
               //MissingSchemaAction:
               //  Add                  添加必需的列以完成架构。
               //  AddWithKey           添加必需的列和主键信息以完成架构。有关如何将主键信息添加到 DataTable 的更多信息,请参见 FillSchema。
               //  Error                如果缺少指定的列映射,则生成 InvalidOperationException。
               //  Ignore               忽略额外列。

      string text1 = null;
      if (data is DataTable)
      {
            mapping1.DataTable = (DataTable) data;
      }
      else
      {
            mapping1.DataSet = (DataSet) data;
            text1 = DbDataAdapter.GetSourceTableName(srcTable, schemaCount);//DataSet中要创建表的名称
            /**
            *internal static string GetSourceTableName(string srcTable, int index)
            *{
            * if (index == 0)
            * {
            *  return srcTable;
            *}
            *  return (srcTable + index.ToString());
            * }
            **/

      }
      mapping1.SetupSchema(SchemaType.Mapped, text1, true, parentChapterColumn, parentChapterValue);//
      /*
       *
       *  public enum SchemaType
       *{
       *   // Fields
       *   Mapped = 2, 将任何现有的表映射应用到传入架构,用转换的架构配置 DataSet。
       *   Source = 1  忽略 DataAdapter 上的任何表映射。使用传入架构配置 DataSet,而不应用任何转换。
       * }
       **/

      return mapping1;
}
 
//SchemaMapping
internal SchemaMapping(DbDataAdapter adapter, IDataReader dataReader, bool keyInfo)
{
      this.adapter = adapter;
      this.dataReader = dataReader;
      if (keyInfo)//如果必须添加列和主键,就用dataReader的GetSchemaTable()返回一个DataTable
      {
            this.schemaTable = dataReader.GetSchemaTable();//返回一个 DataTable,它描述 SqlDataReader 的列元数据。可以查看msdn


      }
}
//SetupSchema 创建
internal void SetupSchema(SchemaType schemaType, string sourceTableName, bool gettingData, DataColumn parentChapterColumn, object parentChapterValue)
{
      MissingMappingAction action1;
      MissingSchemaAction action2;
      if (SchemaType.Mapped == schemaType)
      {
            action1 = this.adapter.MissingMappingAction;//确定传入数据没有匹配的表或列时需要执行的操作
            action2 = this.adapter.MissingSchemaAction;//确定现有 DataSet 架构与传入数据不匹配时需要执行的操作。
            if (!ADP.IsEmpty(sourceTableName))
            {
                  this.tableMapping = this.adapter.GetTableMappingBySchemaAction(sourceTableName, sourceTableName, action1);//创建源表和 DataTable 之间的主映射。
                  goto Label_016D;
            }
            if (this.dataTable == null)
            {
                  goto Label_016D;
            }
            int num1 = this.adapter.IndexOfDataSetTable(this.dataTable.TableName);
            if (-1 != num1)
            {
                  this.tableMapping = this.adapter.TableMappings[num1];
                  goto Label_016D;
            }
            switch (action1)
            {
                  case MissingMappingAction.Passthrough://创建源列或源表,并使用其原始名称将其添加到 DataSet。
                  {
                        this.tableMapping = new DataTableMapping(this.dataTable.TableName, this.dataTable.TableName);
                        goto Label_016D;
                  }
                  case MissingMappingAction.Ignore://忽略没有映射的列或表。
                  {
                        this.tableMapping = null;
                        goto Label_016D;
                  }
                  case MissingMappingAction.Error://缺少指定的列映射,则生成 InvalidOperationException
                  {
                        throw ADP.MissingTableMappingDestination(this.dataTable.TableName);
                  }
            }
            throw ADP.InvalidMappingAction((int) action1);
      }
      if (SchemaType.Source != schemaType)
      {
            throw ADP.InvalidSchemaType((int) schemaType);
      }
      action1 = MissingMappingAction.Passthrough;
      action2 = MissingSchemaAction.Add;
      if (!ADP.IsEmpty(sourceTableName))
      {
            this.tableMapping = DataTableMappingCollection.GetTableMappingBySchemaAction(null, sourceTableName, sourceTableName, action1);
      }
      else if (this.dataTable != null)
      {
            int num2 = this.adapter.IndexOfDataSetTable(this.dataTable.TableName);
            if (-1 != num2)
            {
                  this.tableMapping = this.adapter.TableMappings[num2];
            }
            else
            {
                  this.tableMapping = new DataTableMapping(this.dataTable.TableName, this.dataTable.TableName);////创建源表和 DataTable 之间的主映射。
            }
      }
Label_016D:
      if (this.tableMapping != null)
      {
            if (this.dataTable == null)
            {
                  this.dataTable = this.tableMapping.GetDataTableBySchemaAction(this.dataSet, action2);使用action2的 值获取DataSet的当前 DataTable。可以查看msdn
                  if (this.dataTable == null)
                  {
                        return;
                  }
            }
            if (this.schemaTable == null)
            {
                  this.SetupSchemaWithoutKeyInfo(action1, action2, gettingData, parentChapterColumn, parentChapterValue);
            }
            else
            {
                  this.SetupSchemaWithKeyInfo(action1, action2, gettingData, parentChapterColumn, parentChapterValue);
            }
      }
}
 //FillLoadDataRowChunk
private int FillLoadDataRowChunk(SchemaMapping mapping, int startRecord, int maxRecords)
{
      IDataReader reader1 = mapping.DataReader;
      while (0 < startRecord)       //把DataReader调整到读startRecord记录的位置
      {                             //如果DataReader的总的记录数小于startRecord,就返回0
            if (!reader1.Read())    //其实在这里也可以看出要在DataReader中定位,只有去边历DataReader
            {                       //到这里我们也可以明白fill方法其实也是用DataReader一条条读出来的
                  return 0;
            }
            startRecord--;
      }
      int num1 = 0;
      if (0 >= maxRecords)
      {
            goto Label_0062;
      }
      bool flag1 = base.AcceptChangesDuringFill;//指示在Fill操作过程中,在将 AcceptChanges 添加到 DataTable 之后是否针对 DataRow 调用它。可以在msdn中的DataAdapter 类中查看
      goto Label_0054;
Label_002B:
      try
      {
            mapping.LoadDataRow(this.hasFillErrorHandler, flag1);//装载数据
            num1++;
      }
      catch (Exception exception1)
      {
            this.FillErrorHandler(exception1, mapping.DataTable, mapping.DataValues);
      }
Label_0054:
      if (num1 >= maxRecords)//如果载入的记录数已经满足条件,就退出,否则继续
      {
            goto Label_006A;
      }
      if (reader1.Read())//继续读取数据
      {
            goto Label_002B;
      }
      goto Label_006A;
Label_0062:
      num1 = this.FillLoadDataRow(mapping);
Label_006A:
      return num1;
}
到这里fill方法大概就完了,其实看来fill方法就是首先创建映射,然后在用datareader把数据填充进来.其中我忽略了好多东西比如它的异常处理,还有好多细节,请各位朋友多多指教,在这里列出来也是和各位朋友探讨。

YOLOv12涨点优化:自研检测头 | 独家创新(Partial_C_v12Detect)检测头结构创新,实现涨点 现有12Detect进行二次创新,提升检测精度,独家创新(Partial_C_12Detect)检测头结构创新,适合科研创新度十足,强烈推荐 阅读详情

相关推荐

天线学习笔记——串馈网络设计

工程中通常更倾向于使用50Ω、70.7Ω、100Ω的固定阻抗的带宽,实际中可以分别使用固定阻抗的带宽和计算得到的带宽进行仿真,观察二者的性能,取性能更优者即可。本系列是一个记录天线设计的笔记,分享出来也希望能够帮助到大家,后续本系列文章还会不定期更新,如有需要可关注,任何问题均可在评论区或私信提出,看到必回。如果对大家有帮助可进行打赏哦~

Ethan的博客 7877

使用SqlDataAdapter填充数据

使用SqlDataAdapter填充数据,获取数据库中表内容数据

qq_43733614的博客 572

亚马逊(Amazon ads)广告API申请步骤(已经更新完)

你如果是自己的店铺使用,就选择左边的、如果是授权的那种给别人用就选右边的。审核通过了才能进行下一步,我目前就是刚申请完,后续会持续更新!然后会调整到,下面的页面,选择Agency然后右上角点击创建。审核通过会发邮件到你的企业邮箱、时间大概是1-7天左右。输入对应的信息,点击提交审核,就可以开始申请了。1、广告平台跟卖家平台是分开的,这个概念要清楚。2、注册广告一定要用企业邮箱!回到首页,点击成为合作伙伴。注册了以后会跳转到广告。然后再点击加入合作伙伴。然后会弹出下面的页面。

阿泽的博客 5655

SqlDataAdapter中Fill方法浅析

先来看看SqlDataAdapter中的所有成员public sealed class SqlDataAdapter : DbDataAdapter, IDbDataAdapter, IDataAdapter, ICloneable{      // Events      public event SqlRowUpdatedEventHandler RowUpdated;      public

thinkingforever的专栏 8938

分数计算器(C++课设)

需求概述 (1)设计一个分数计算器,进行分数的算术运算和逻辑运算。 (2)能够像使用基本数据的对象一样,对分数进行“+”、“-”、“*”和“/”等算术运算和比较两个分数的大小。 (3)以a/b的形式输入输出分数,允许输入输出整数这种特殊形式。 (4)对不是约化型的分数进行约化,避免分母为负数。 (5)如果分数的分母为0、除数为0或输入时格式有错,采用异常处理机制解决。 输入 以分数的形式输入。(如1/2) 若分母为0会抛出异常,重新输入。 菜单页面 RationalNumber.h(头文件) #ifnd

sadnessss的博客 8769

【Konva】解决图形加入group后无法获取到绝对坐标,以及group内绘制新图形坐标偏移的问题

解决konva绘图开发时“图形加入group后坐标不会变动,无法获取到绝对坐标”的问题

近10年前端开发工作经验,为你分享日常经验所得 1499

c# SqlDataAdapter的Fill方法

DataSet ds = new DataSet(); sda.Fill(ds, "table"); table虚表名,将查询到的数据放入ds中,这张表叫table可以通过ds["usertable"]访问到 一个dataset中可有多张表。 sda.Fill(DataSet ds,String datatable) 返回值是成功添加或更新的行的数量。...

qq_41642615的博客 6699

汽水音乐自动化薅羊毛教程:从零搭建稳定赚钱脚本

📖 前言:为什么要学习自动化脚本?在数字时代,时间就是金钱。汽水音乐等App通过观看广告奖励用户金币的模式,本质上是将我们的时间转化为收益。本教程将教你如何用Python自动化这个过程,让程序为你"打工",实现被动收入。通过本教程,你将学到:移动端自动化测试的核心技术Python在自动化领域的实际应用如何将重复性任务转化为自动化流程创造属于自己的"数字员工"第一章:环境准备与基础配置1.1 硬件要求Android手机一部(建议使用备用机)USB数据线。

weixin_44947827的博客 5783

SqlDataAdapter.Fill

SqlConnection con = new SqlConnection("server=904-8D01759C2C0//SQLEXPRESS;database=Study_NET;uid=sa;pwd=sasa");SqlConnection con = DB.createCon();con.Open();SqlDataAdapter sda = new SqlDataAdapter("se

黑土墨 978

【Qt开发】管理OpenGL上下文QOpenGLContext类及应用实践示例代码

QOpenGLContext 提供了一个简单、高效的接口来管理 OpenGL 上下文。本文详细介绍了 QOpenGLContext 的基本功能、常用方法、信号槽机制、高级应用技巧及常见问题的解决方法。通过这些介绍,读者可以更好地掌握和利用 QOpenGLContext 进行 OpenGL 渲染和管理实验。对于有特殊需求的开发者,也可以通过探索更多高级设置和优化策略,以满足具体的应用场景。

科技改变人类,技术成就未来 1872

解锁VS2022!手把手教你本地部署Deepseek

在 VS2022 中本地部署 Deepseek,我们首先需要确保硬件资源的充足,如高性能的 GPU、大容量内存和高速存储等,这是模型稳定运行的基石。如果生成的摘要能够准确概括原文的核心内容,就表明 Deepseek 模型在文本分析方面的功能正常,部署稳定可靠。这对于开发者来说,能够大大提高开发效率,当遇到一些常见的功能实现时,可以借助 Deepseek 模型快速生成基础代码框架,减少手动编写的工作量。在大语言模型的蓬勃发展的当下,Deepseek 凭借其卓越的性能和创新的技术,已然成为该领域的佼佼者。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 1万+

DataAdapter的Fill方法

使用DataAdapter填充DataSet(1) 在选择了DataAdapter的类型(SqlDataAdapter或OleDbDataAdapter)并配置了DataAdapter来执行所需的任务之后,可以用创建的DataAdapter来填充DataSet。1.使用DataA

枫 3799

液滴碰撞壁面的过程背景论文——bouncing反弹,spreading扩展,splashing飞溅。铺展过程介绍。还存在很多未解之谜。

【1993-德国-Phenomena of liquid drop impact on solid and liquid surfaces】液滴碰撞壁面的过程背景——bouncing反弹,spreading扩展,splashing飞溅。还存在很多未解之谜。还存在很多未解之谜。不同液滴形状碰撞过程。

qq_15963745的博客 199

数据库开发020 SqlDataAdapter之Fill方法

SqlDataAdapter 类 https://docs.microsoft.com/zh-cn/dotnet/api/system.data.sqlclient.sqldataadapter?view=dotnet-plat-ext-3.1 构造函数 SqlDataAdapter() 初始化SqlDataAdapter类的新实例。 SqlDataAda...

复行数十步 778

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

一个有趣的问题, 你知道SqlDataAdapter中的Fill是怎么实现的吗

一:背景 讲故事 最近因为各方面原因换了一份vb.net教程工作,去了一家主营物联柜的公司,有意思的是物联柜上的终端是用 wpf 写的,代码也算是年久失修,感觉技术债还是蛮重的,前几天在调试一个bug的时候,看到了一段类似这样的代码: var dt = new DataTable(); SqlDataAdapter adapter = new SqlDataAdapter(new SqlCommand()); adapter.Fill(dt); 是不是很眼熟哈,或许你也已经多年不c#教程见了,犹记得那

chinaherolts2008的博客 570

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

SqlDataAdapter中Fill方法的分析

作者:山东人在成都    今天在测试一个数据库连接时,发现当使用SqlCommand的ExecuteReader方法打开一个DataReader后,如果没有关闭,再使用SqlDataAdapter类的Fill方法填充一个DataSet,这时就会发生一个错误,产生一个InvalidOperationException异常,表明已有打开的与此相关联的DataReader,必须首先将它关闭.   

山东人在成都的专栏 4132

vs中预览datatable_你知道SqlDataAdapter中的Fill是怎么实现的吗?

(给DotNet加星标,提升.Net技能)一、背景1、讲故事最近因为各方面原因换了一份工作,去了一家主营物联柜的公司,有意思的是物联柜上的终端是用 wpf 写的,代码也算是年久失修,感觉技术债还是蛮重的,前几天在调试一个bug的时候,看到了一段类似这样的代码:var dt = new DataTable();SqlDataAdapter adapter = new SqlDataAdap...

weixin_39679061的博客 201

SqlDataAdapter的用法

SqlDataAdapter是DataSet和 数据库的连接(桥接器),用于检索和保存数据,SqlDataAdaoter通过对数据源使用适当的Transact-SQL语句映射File(他作为填充DataSet的数据源中的数据)和Update(更改DataSet中的数据源)提供一种桥接方式,当SqlDataAdapter填充DataSet时,他为返回的数据创建必须的表和列 第一种方式(字符串查询) string strCon =“uid=sa;pwd=123456;database=test;server=1

caiweijiancsdn的博客 4250

SqlDataAdapter对象的Fill(dataset,datatable)方法中的dataTable

今天看到有人问了个问题,和我的想法差不多,贴出来大家共享。 ado.net中SqlDataAdapter对象的Fill()方法()中的2个参数是什么意思? [ 标签:sqldataadapter,fill,参数 ] ado.net中SqlDataAdapter对象的Fill()方法()中的2个参数是什么意思? 第一个参数是DataSet对象 第2个呢? 第2个参数是什么意

lllljz的专栏 8941

记录 DataAdapter.Fill 方法 (DataSet) SqlDataAdapter();SqlCommand SqlConnection 类

 【转自】http://hi.baidu.com/yandavid/blog/item/72006031eddb9418eac4af30.html DataAdapter.Fill 方法 (DataSet)  在 DataSet 中添加或刷新行以匹配使用 DataSet 名称的数据源中的行,并创建一个 DataTable。SqlConnection con = new SqlConne

gxj022的专栏 1584

怎么将两个datatable 合并_一个有趣的问题, 你知道SqlDataAdapter中的Fill是怎么实现的吗

一:背景 1. 讲故事 最近因为各方面原因换了一份工作,去了一家主营物联柜的公司,有意思的是物联柜上的终端是用 wpf 写的,代码也算是年久失修,感觉技术债还是蛮重的,前几天在调试一个bug的时候,看到了一段类似这样的代码: var dt = new DataTable(); SqlDataAdapter adapter = new SqlDataAdapter(new SqlCo...

weixin_40006133的博客 295

SqlDataAdapter以及属性 SelectCommand InsertCommand UpdateCommand DeleteCommand

SqlDataAdapter 比DataAdapter更进一步,专门用来操作SQL Server 数据库。 一、 方法   SqlDataAdapter有两个有用的方法,分别为 fill 和 update。下面分别来介绍这两方法。 1. fill 方法   fill 方法是用来填充 DataSet 的。也就是,把数据库中的运送到C#空间。fill 有13个重载的方法,在使用时可以根据情况选...

zq爱生活爱代码的博客 2198

SqlDataAdapter Fill方法的重载

[code="java"] public int Fill ( DataSet dataSet, int startRecord, int maxRecords, string srcTable ) [/code] 参数: dataSet 要用记录和架构(如果必要)填充的 DataSet。 startRecord 从其开始的从零...

shirlly 359

vs中预览datatable_一个有趣的问题, 你知道SqlDataAdapter中的Fill是怎么实现的吗

一:背景1. 讲故事最近因为各方面原因换了一份工作,去了一家主营物联柜的公司,有意思的是物联柜上的终端是用 wpf 写的,代码也算是年久失修,感觉技术债还是蛮重的,前几天在调试一个bug的时候,看到了一段类似这样的代码: var dt = new DataTable(); SqlDataAdapter adapter = new SqlDataAdapter(new SqlC...

weixin_39639550的博客 165

SqlDataAdapter简单介绍

一SqlDataAdapte特点介绍1、表示用于填充 DataSet 和更新 SQL Server 数据库的一组数据命令和一个数据库连接。2、在SqlDataAdapter和DataSet之间没有直接连接。当完成SqlDataAdpater.Fill(DataSet)调用后,两个对象之间就没有连接了。SqlDataAdapter有三种构造函数 public SqlDataAdapter(S

WINCOL的专栏 2121

SqlDataAdapter知识

SqlDataAdapter是 DataSet和 SQL Server之间的桥接器。SqlDataAdapter通过对数据源使用适当的Transact-SQL语句映射 Fill(它可填充DataSet中的数据以匹配数据源中的数据)和 Update(它可更改数据源中的数据以匹配 DataSet中的数据)来提供这一桥接。当SqlDataAdapter填充 DataSet时,它为返回的数据创建必需的表和列(如果这些表和列尚不存在)。 简介 但是,除非 MissingSchemaAction,否则这个隐式创建的架构

极客神殿 760
上一篇: SqlDataAdapter中Fill方法浅析
下一篇: 重新调整数组长度
thinkingforever
博客等级 码龄24年 29粉丝 8原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值