如何从一个datatable中Copy一行到另外一个datatable中

fly_miss 2003-06-23 04:34:02
两个Datatable的结构是一样的,如何从一个datatable中copy 一行到另外一个了

我写了,却不行
dim mytable,myOthertable as datatable
dim tmpRow as datarow

mytable=mydb.returnTable("select * from t_info")
myOthertable=mytable.clone
tmpRow=mytable.rows(0)
myOthertable.rows.add(tmpRow)

抱错!说tmpRow已经在一个datatable中
...全文
111 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiongliang2003 2003-06-23
  • 打赏
  • 举报
回复
要通过一个一个字段的赋值
lbx1979 2003-06-23
  • 打赏
  • 举报
回复
你原来的写法不对的,因为datarow是引用类型的
所以需要作赋值处理
fly_miss 2003-06-23
  • 打赏
  • 举报
回复
没有人说了,我自己写了
DataTable Page=TableAll.Clone();
for(int i=StartPosition;i<=EndPosition;i++)
{
DataRow DR=Page.NewRow();
DR.ItemArray=TableAll.Rows[i].ItemArray;
Page.Rows.Add(DR);
}
return Page;
quicktest professional 12.5简称QTP,这是一款专业的软件自动化测试工具,绝对是测试人员的法宝,它为开发人员和测试人员提供了实用的功能,可以方便开发者对软件的漏洞进 行测试和修复,软件集成了软件测试一体化流程,只需要将要测试的应用导入,便可以进行相应的分析了. 主要功能: 1)QTP是一个侧重于功能的回归自动化测试工具;提供了很多插件,如:.NET的,Java的,SAP的,Terminal Emulator的等等,分别用于各自类型的产品测试。默认提供Web,ActiveX和VB。 2)QTP支持的脚本语言是VB,这对于测试人员来说,感觉要“舒服”得多(如相比SilkTest采用C语言)。VB毕竟是一种松散的、非严格的、普及面很广的语言。 3)QTP支持录制和回放的功能。录制产生的脚本,可以拿来作为自己编写脚本的template。录制时,还支持一种lower level 功能,这个对于QTP不容易识别出来的对象有用,不过它是使用坐标来标识的,对于坐标位置频繁变动的对象,采用这种方式不可行。另外,QTP的编辑器支持两种视图:Keyword模式和Expert模式。Keyword模式想法是好的,提供一个描述近似于原始测试用例的、跟代码无关的视图(我基本很少用,除了查看、管理当前test各个action的完整流程),而Expert就是代码视图,一般编写脚本都在这个区域。 4)一个有用的工具:ObjectSpy,可以用来查看Run-time object和Test object属性和方法。 5)QTP通过三类属性来识别对象:a)Mandatory; b)Assitive; c)Ordinalidentifiers。大部分情况下,通过对象的一些特定属性值就可以识别对象(类型a)。这些属性可以通过Tools->Object Identification 定义。 6)Object Repository(OR)是QTP存储对象的地方。测试脚本运行后,QTP根据测试脚本代码,从这个对象库查找相应对象。每个Action可以对应有一个或者多个OR,也可以设置某个OR为 sharable的,这样可以供其他Action使用。注意,使用QTP录制功能时,默认将被测对象放在local OR,可以通过 Resources->Object Respository,选择Local查看。 7)说到QTP的要点,不得不说Action。Action是QTP组织测试用例的具体形式,拥有自己的DataTable和Object Repository,支持Input和output参数。Action可以设置为share类型的,这样可以被其他test的Action调用(注意:QTP是不支持在一个test调用另外一个test的,只有通过sharable action来调用)。 8)如3)所述,一个test,多个action的流程组织,只有通过Keyword视图查看和删除,在Expert视图没有办法看到。 9)调用Action可以通过菜单Insert->Callto *** 来实现。QTP提供三种类型的调用方式:a)call to new Action,在当前test创建一个新的Action;b)call to Copy of Action;c)call to existing action,调用一个re-usable action,如果这个re-usableaction来自另外一个test,将以只读的方式插入到当前test。 10)QTP提供excel 形式的数据表格DataTable,可以用来存放测试数据或参数。DataTable有两种类型:global 和local。QTP为DataTable提供了许多方法供存取数据,在对测试代码进行参数化的时候,这些方法非常有用。 11)环境变量(EnvironmentVariables)。在一个test,环境变量可以被当前test所有action共享。环境变量也有两种类型:build in 和user defined。用户自定义的环境变量可以指向一个XML文件,这样可以实现在众多test之间共享变量。 12)QTP可以引用外部的VBS代码库,通过Settings-》Resource加入,也可以ExecuteFile命令在代码直接执行。这种VBS库可以为所有action和test共享。 13)QTP默认为每个test提供一个测试结果,包括Passed,Failed,Done,Warning和information几种状态类型,可以进行对结果Filter。但是,只能为每个test产生一个testing result,不能为多个testing产生一个总的testing res
2.5主要变动: 1.重要改进:新版本Delphi下的VCL控件已经比较完善,封装良好,与Delphi无缝连接,改变了旧版需要将Dataset的数据复制到报表引擎的实现方式,通过模拟ADO接口的方式直接支持BDE/ClientDataset/等非ADO方式的Dataset,不需要考虑太多的COM方面的因素,强烈建议Delphi的开发者直接使用该VCL控件。 使用VCL控件编译的程序发布时,将AcReport.dll和您的EXE放在同一个文件夹下一起发布即可,不需要运行RegSvr32来注册控件,VCL的代码会自动注册该控件。 2.完善文本控制方式(在设计器界面上增加了此项菜单): 1).当文本控制设置为自动适应单元格(自动缩放字体)时,选择上对齐方式时,也能自动换行。 2)当文本控制设置为截断字符时,支持自动换行,保持单元格的高度不变,在某些特殊应用,不管文本如何变化,可以保持表格的形状不变。 3.增加了OnSaveReport事件,当用户在设计器点击“保存”按扭时,会触发此事件,程序可以响应此事件执行自定义保存,例如可以将报表保存到数据库,或者返回一个信息给设计器用户。 4.直接支持ADO.net的Dataset和DataTable对象,不需要再通过CustDataBuiler对象来转换,大大提高了在.net下的运行速度。(需要引用 AcNetUtils.dll,具体使用方法请参考Demo) 代码示例: //Dataset: //2.5以前的版本需要将Ado.net下datatable在ACcopy一个复本,速度比较慢 // AcReport.AcUtils.CopyDatasetToAcRptEngine(mDataset, mac, false); //新版本的处理方式,通过ADO-ADO.net适配器的方式直接访问 DbAdapter.FillDatasetToAC(mDataset, mac); //DataTable: mDataset.Tables["zlemployee"].TableName = "雇员档案"; AcReport.AcUtils.CopyTableToAcRptEngine(mDataset.Tables["雇员档案"], mac, false); //重新加入一个表到AcReport (旧版本方式) //在2.5以后的版本,可以用如下的方式将ADO.net的DataTable对象通过AcRecordsetAdapter转换为ADO接口的方式直接加入到AcEngine, //这样做就不需要在AC复制一个复本,大大提高的速度。 AcRecordsetAdapter RecordAdp = new AcRecordsetAdapter(mDataset.Tables["雇员档案"]); mac.AddNetAdoData("雇员档案", RecordAdp); // 以上两行也可以直接调用 AcNetUtils 类库里提供的现成方法(效果是一样的): AcNetUtils.DbAdapter.FillDataTableToAC(mDataset.Tables["雇员档案"], mac); 5.可拖动对象设计功能增强 6.支持 条码 Code128 Auto ACReport简介 Anycell Report(简称AC Report)是一款国式报表组件,是国内最早的基于表格,支持图文混排、公式和脚本的国式报表工具之一。就如Anycell Report的名称那样,灵活强大的表格功能一直是AC Report区别于其它软件或控件最显著的特征之一,AC Report 表格取消了传统表格概念“列”的概念,每一行上的单元格数量可以不等,且可以自由活动,勿须上下对齐,在制作复杂的国式报表时可以避免很多不必要的合并拆分操作,制作表格更加方便和随心所欲,并且省时省力。AC Report单元格支持多种丰富的形态,例如格式化文本、图片、图表、条码、OLE容器等。 AC Report的一些基本特点: 1.独具特色的表格,风格与Word表格相似,但可以做出比Word或Excel更灵活的表格来。 2. 功能全面、专业的国式报表设计器,国用户更易于学习和接受。 3.支持多种单元格样式,可以打印图像、图表(直方图、折线图等)、Rich文本、 条形码、式财务帐薄、支持在报表嵌入Word、Excel文档等。 4. 强大的计算和合计功能。内置表达式解析系统和函数库。 5. 可扩充性,可以在应用程序给报表引擎扩充函数库、报表样式和单元格样式。 6.支持多种报表样式,如清单式、分组、交叉表、以及子报表
[SQL]将Excel表数据导入SQL Server2005的几种方法归纳 数据库 2010-07-27 11:14:26 阅读201 评论0 字号:大小 订阅 近日在巨轮着手车间负荷数据处理,反馈回来的数据是保存在Excel文件的,我必须将其导入SQL Server2005,供存储过程计算。 由于之前没有将Excel数据导入SQL Server2005的经验,因此摸索着花了一天时间才搞定。下面将网上收集到的几种导入方法做个归纳。 方法一、利用SQL Server2005自带的DTS工具,手工导入: 第一步是点击开始并选择运行并输入CMD然后在命令提示符里输入DTSWIZARD。SQL Server 导入和导出向导的欢迎界面将显示出来,如下图所示:(也可以这样打开该界面:1、登录到 SQL Server Management Studio。2、在 “对象资源管理器 ”右键单击 “管理 ”,在弹出列表单击 “导入数据 ”。)   当你点击下一步按钮时,它将进入选择数据源向导界面。用户应该选择数据源为Microsoft Office 12.0 Access Database Engine OLE DB Provider 然后在向导界面点击属性…按钮,它将弹出数据链接属性界面。在所有标签页,双击数据源属性值并输入电子数据表的位置,例如“C:\Excel2007\Import\SampleData.xlsx”作为导入数据的数据源的Microsoft Office Excel 2007文件名称和路径。然后双击扩展属性并选择Excel 12.0作为属性值。   到Microsoft Office Excel 2007的连接可以通过点击测试连接按钮来进行测试,如下图所示:   在下一个页面,数据源需要选为SQL Native Client,因为数据将导入到SQL Server 2005。然后你需要选择数据所要导入的服务器名称,并需要配置合适的验证模式,它之后跟着数据库名称。  在这个例子,我们将使用windows验证连接到本地SQL Server实例,所使用的数据库将是ImportExcel。   在Specify Table Copy or Query(指定表复制或查询)向导界面,选择copy data from one or more tables or views(从一个或多个表或视图复制数据)选项,并继续这个向导到下一个界面。   在Select Source Table and Views(选择源表和视图)向导界面,用户需要在源选择雇员电子数据表,然后在目标就可以看到ImportExcel.dbo.Employee了。之后点击Edit Mappings…(编辑匹配…),扫描电子数据表的可用数据,如果数据类型与SQL Server所建议的不同的话那么指定数据类型。   在Save and Execute Package(保存和执行包)向导界面,有两个选项叫做Execute Immediately(立即执行)和Save SSIS Package as file system(保存SSIS包为文件系统)。你可以选择任何一个选项然后点击Finish(完成)按钮来运行和结束这个包配置。 方法二、在查询分析器里,直接写 SQL语句: 1、如果是导入数据到现有表,则采用 INSERT INTO 表 SELECT * FROM OPENROWSET('MICROSOFT.JET.OLEDB.4.0' ,'Excel 5.0;HDR=YES;DATABASE=c:\test.xls',sheet1$) 的形式 2、如果是导入数据并新增表,则采用 SELECT * INTO 表 FROM OPENROWSET('MICROSOFT.JET.OLEDB.4.0' ,'Excel 5.0;HDR=YES;DATABASE=c:\test.xls',sheet1$) 的形式。 以上语句是将 EXCEL文件里 SHEET1工作表所有的列都读进来,如果只想导部分列,可以 INSERT INTO 表 (a1,a2,a3) SELECT a1,a2,a3 FROM OPENROWSET('MICROSOFT.JET.OLEDB.4.0' ,'Excel 5.0;HDR=YES;DATABASE=c:\test.xls',sheet1$) 其实可以将 OPENROWSET('MICROSOFT.JET.OLEDB.4.0' ,'Excel 5.0;HDR=YES;DATABASE=c:\test.xls',sheet1$)当成一个表,例如我就写过这样一个句子: INSERT INTO eval_channel_employee(channel,employee_id) SELECT CASE a.渠道 WHEN 'DIY' THEN 1 WHEN 'RDC' THEN 0 WHEN 'KCM' THEN 2 ELSE 3 END ,b.id FROM OPENROWSET('MICROSOFT.JET.OLEDB.4.0' ,'Excel 5.0;HDR=YES;DATABASE=c:\temp\name.xls',sheet1$) AS a,pers_employee b WHERE a.员工编码 =b.code 不管是哪种方式,哪种途径,系统都会默认将第一行上的内容作为字段名。 3、利用C#自己开发数据导入小工具 //连接串 string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 8.0;Data Source=" + [EXCEL文件,含路径] + ";"; OleDbConnection conn = new OleDbConnection(strConn); conn.Open(); DataTable dtSchema = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,new object[] {null, null, null, "TABLE"}); DataSet ds = new DataSet(); //一个EXCEL文件可能有多个工作表,遍历之 foreach( DataRow dr in dtSchema.Rows ) { string table = dr["TABLE_NAME"].ToString(); string strExcel = "SELECT * FROM [" + table + "]"; ds.Tables.Add(table); OleDbDataAdapter myCommand = new OleDbDataAdapter(strExcel,conn); myCommand.Fill(ds,table); } conn.Close(); 这样,读取出来的数据就藏在 DataSet里了。 采用这种方式,数据库所在机器不必装有 EXCEL。 总结: 当Excel表数据完整时,利用SQL自带的导入工具手工导入比较方便。当数据不完整或数据格式对应不上时,使用导入工具会出错,利用SQL查询语句就更便捷。当结合以上两种方法的优点,利用C#自己开发出数据导入工具是最佳选择。

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧