ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

c# – System.ArgumentException:Object不是ADODB.RecordSet或ADODB.Record

2019-05-29 06:56:04  阅读:302  来源: 互联网

标签:c net-3-5 ssis etl


我用下面的代码填写数据表 –

OleDbDataAdapter oleDA = new OleDbDataAdapter();
DataTable dt = new DataTable();
oleDA.Fill(dt, Dts.Variables["My_Result_Set"].Value); 

我收到错误 –

Error: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.ArgumentException: Object is not an ADODB.RecordSet or an ADODB.Record.
Parameter name: adodb
   at System.Data.OleDb.OleDbDataAdapter.FillFromADODB(Object data, Object adodb, String srcTable, Boolean multipleResults)
   at System.Data.OleDb.OleDbDataAdapter.Fill(DataTable dataTable, Object ADODBRecordSet)
   at ST_34944nkdfnfkdffk333333.csproj.ScriptMain.Main()
   --- End of inner exception stack trace ---
   at System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   at System.RuntimeType.InvokeMember(String name, BindingFlags bindingFlags, Binder binder, Object target, Object[] providedArgs, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParams)
   at Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTATaskScriptingEngine.ExecuteScript()

为什么我会收到此错误?我之前使用过完全相同的代码,它从来没有给我任何问题.

解决方法:

在脚本任务中,我创建了一个名为DtUsers的数据表,在数据表中创建了列,为行单元格添加了行和赋值.然后我将这个数据表存储在一个名为activeDirectoryUsers的对象变量中:

Dts.Variables["User::activeDirectoryUsers"].Value = DtUsers;

然后我创建了一个数据流并添加了一个源脚本组件.我试图使用Fill()并收到与OP相同的错误.

OleDbDataAdapter da = new OleDbDataAdapter();
DataTable dt = new DataTable();
da.Fill(dt, Variables.activeDirectoryUsers);  //error here

Object is not an ADODB.RecordSet or an ADODB.Record

我的解决方案有两个方面:

>将DtUsers数据表添加到DataSet,然后将DataSet存储在对象变量中.

DataSet ds = new DataSet();
ds.Tables.Add(DtUsers);
Dts.Variables["User::activeDirectoryUsers"].Value = ds;

>在源脚本组件中,创建一个新的DataSet并将对象变量强制转换为类型DataSet,并将其分配给DataSet:

DataSet ds = (DataSet)Variables.activeDirectoryUsers;
if (ds == null || ds.Tables.Count == 0) return;
DataTable dt = ds.Tables[0];
//do stuff with dt...

This article带我到这个解决方案.

标签:c,net-3-5,ssis,etl
来源: https://codeday.me/bug/20190529/1176157.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有