0

私のセットアップ - .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);
4

3 に答える 3

0

答えは Microsoft SSIS フォーラムにあります。そこに同じ投稿。参照を追加したら、ctrl+shift+s を使用してすべて保存するか、[ファイル] > [すべて保存] から保存します。これを行わないと、参照が保存されません。馬鹿な。Ctrl+s はコードのみを保存し、他には何も保存しません。なぜだろう。


答えを見つける前に試したこと

私の質問が得たコメントに基づいて-「ターゲットプラットフォーム」をSSIS用のVisual Studio 2008、つまりBIDSのx86に変更する場合は、ビルドに移動->構成マネージャー->そこにいくつかのプラットフォームオプションが表示されます。必要に応じて、それらをいじってみてください。

ただし、ここで説明されているように、プラットフォームを変更すると結果が生じます - 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 ビット モードで実行してもまったく問題ありません。

于 2013-11-01T20:08:39.427 に答える
-1

例外が示唆するように、次の場合に FileNotFoundException が発生します。

ディスク上に存在しないファイルにアクセスしようとして失敗した場合にスローされる例外。

また、COM オブジェクトを参照すると Interop.ADODB が作成されます。プロジェクトの bin\debug フォルダーに移動し、Interop.ADDODB ファイルが見つかるかどうかを確認します。見つからない場合は、参照している *.dll ファイルの整合性を確認する必要があります。

于 2013-11-01T19:11:11.747 に答える