无法添加对c#代码的引用

时间:2013-11-01 17:44:48

标签: c# .net .net-3.5

我的设置 - .NET 3.5和Visual Studio 2008。我有c#代码(在ssis中,但不要担心ssis)。我希望能够在我的代码中使用ADODB。所以,我添加了对ADODB的引用。我从COM选项卡中选择了Microsoft ActiveX Data Objects 2.8 Library。然后,我添加了使用ADODB作为我的导入。

示例步骤在这里 -

http://www.c-sharpcorner.com/uploadfile/ptailor/adodbservice12062005002501am/adodbservice.aspx

但是,在运行项目之后,我收到一个错误,我也看到引用列表中缺少引用。我发誓在添加它之后它就在那里。我该如何解决这个问题?

错误 -

System.IO.FileNotFoundException: Could not load file or assembly 'Interop.ADODB, Version=2.8.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.

File name: 'Interop.ADODB, Version=2.8.0.0, Culture=neutral, PublicKeyToken=null'
   at ST_39348fjejencuw92092828303554.csproj.ScriptMain.Main()

WRN: Assembly binding logging is turned OFF.
To enable assembly bind failure logging, set the registry value [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) to 1.
Note: There is some performance penalty associated with assembly bind failure logging.
To turn this feature off, remove the registry value [HKLM\Software\Microsoft\Fusion!EnableLog].

   --- 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()

需要这个问题 -

我试图使用下面的代码来获取ADO记录集中的行数。当我尝试使用代码时,我不断收到错误“无法找到类型或命名空间名称'ADODB'”。

ADODB.Recordset result = (ADODB.Recordset)Dts.Variables["RESULT_SET"].Value;
int rowCount = result.RecordCount;
MessageBox.Show("rowCount = " + rowCount);

3 个答案:

答案 0 :(得分:0)

答案在微软SSIS论坛上。那里的帖子相同。添加引用后,只需使用ctrl + shift + s保存所有内容,或者只需从File>中进行保存即可。保存全部。如果你不这样做,那么引用就不会被保存。愚蠢。 Ctrl + s仅保存代码而不保存任何其他内容。我想知道为什么。


在我找到答案之前我尝试过的一些事情

基于我的问题得到的评论 - 如果你想将“目标平台”改为x86 for Visual Studio 2008 for SSIS,即BIDS,那么转到构建 - >配置管理器 - >你可以在那里看到一些平台选项。如果你愿意,可以尝试摆弄它们。

但是,如此处所述,有改变平台的后果 - http://social.msdn.microsoft.com/Forums/sqlserver/en-US/ff154ba9-0793-4c19-8896-4fbdc119a6a3/could-not-load-file-or-assembly?forum=sqlintegrationservices#6916a8e9-8ae5-46c3-8cd2-9150dbc14bc6

  

如果我执行包,是否有可能遇到任何问题   32位模式?这有什么不利之处吗?

-

  

唯一的主要缺点是你的包不能使用超过2GB   用于处理的内存。如果你的软件包有低内存需求,那么   以32位模式执行绝对没问题。

答案 1 :(得分:-1)

从visual studio运行项目时,使用以下步骤将平台目标强制为32位:

->Right click on Project
->Select Properties
->Goto Build Options
->Change  "Platform Target" from "ANY CPU" to "X86"

现在运行项目。

答案 2 :(得分:-1)

由于Exception建议在以下时间发生FileNotFoundException:

  

尝试访问磁盘上不存在的文件失败时引发的异常。

当您引用COM对象时,也会创建Interop.ADODB。转到项目的bin \ debug文件夹,看看是否可以找到Interop.ADDODB文件。     如果找不到它,则应检查要引用的* .dll文件的完整性。