Visual Studio におけるデータ アクセスのトラブルシューティング
更新 : 2007 年 11 月
このトピックでは、Visual Studio でデータ アクセスについて操作しているときに発生する一般的な問題の一覧を示します。
デザイン時にアクセスできるデータベースに実行時にアクセスできない
このエラーの最も可能性の高い原因としては、実行時に渡しているユーザー名とパスワードがデータベースへのアクセスを拒否されていることが考えられます。解決方法は、データベースで使用されている接続文字列の認証および承認方法によって異なります。
この問題の原因は次のとおりです。
- [接続の追加] ダイアログ ボックスと [接続の変更] ダイアログ ボックス (一般) の設定で、[特定のユーザー名とパスワードを使用する] をオンにし、[パスワードを保存する] をオフにしています。このシナリオでは、デザイン時にデータ ソースに接続しようとしたときに、ユーザー名とパスワードの入力が要求されます。実行時の接続のためには、アプリケーション内に、適切なユーザー名とパスワードをデータ ソースに渡す機能を含める必要があります。
以下の点を確認してください。
アプリケーションで使用しているユーザー名とパスワードがデータ ソースにアクセスするための適切なアクセス許可を持っていることを確認します。
データベースに格納されているユーザーのアクセス許可設定が正しいことを確認します。
アプリケーションが動作しているコンピュータとデータ ソースとの間にネットワーク接続が存在することを確認します。
SQL コマンドを実行したときに返される出力パラメータが正しくない、または足りない
このエラーの最も可能性の高い原因として、パラメータの Direction プロパティの設定が間違っていることが考えられます。パラメータの Direction プロパティは、ParameterDirection 列挙定数に定義された値に設定されます。
パラメータの Direction プロパティが、データを受け取ることができる値 (出力パラメータの場合は Output) に設定されていることを確認します。
パラメータのデータ型が、戻り値のデータ型と同じであることを確認します。
メモ : 出力パラメータはデータ ストリームの最後で返されるため、DataReader オブジェクト (SqlDataReader など) を使用している場合は、オブジェクトを閉じるかデータの終わりまで読み出さないと、出力パラメータが表示されません。
出力パラメータが返されない問題の詳細とコード例については、マイクロソフト製品サポート サービスの Web サイト (https://support.microsoft.com) で、JP308051 を検索してください。
".Net データ SQL プロバイダ (System.Data.SqlClient) には Microsoft Data Access Components(MDAC) version 2.6 以降が必要です" エラーが発生する
Microsoft Windows Software Development Kit (SDK) および .NET Framework 再頒布可能パッケージには、MDAC のインストールが含まれていません。データ アクセス機能を使用するすべての .NET Framework アプリケーションは、MDAC 2.6 以降 (MDAC 2.8 SP1 を推奨) を必要とします。MDAC の最新バージョンは、Microsoft の Web サイト (https://www.microsoft.com/japan) からダウンロードして入手できます。
Visual Studio は既定で MDAC をインストールするため、このエラーの最も可能性の高い原因としては、Visual Studio がインストールされていないコンピュータに配置していることが考えられます。
アプリケーションを配置するときには、配置先のコンピュータ上の MDAC のバージョンをセットアップ プログラムでチェックできます。詳細については、「方法 : Microsoft Data Access Components の起動条件を追加する」を参照してください。
トランザクションをコミットまたはロールバックすると予期しない例外が発生する
データ ソースでのエラーによってトランザクションがすぐにロールバックされる場合、アプリケーションで次のいずれかのエラーが発生する可能性があります。
"COMMIT TRANSACTION 要求に対応する BEGIN TRANSACTION がありません。"
"ROLLBACK TRANSACTION 要求に対応する BEGIN TRANSACTION がありません。"
この動作はデザインで定義されているものですが、外部データ ソースにアクセスするメソッド (Commit メソッド、Rollback メソッドなど) は Try...Catch ステートメント内から呼び出すのが常に最善の方法です。詳細については、「方法 : Try ブロックと Catch ブロックを使用して例外をキャッチする」 (Visual Basic) または「try-catch (C# リファレンス)」を参照してください。
データセットからテーブルを削除しようとすると InvalidOperationException が発生する
データセットが XmlDataDocument にバインドされている場合、Clear メソッドを呼び出すと次の例外がスローされます。
System.InvalidOperationException: DataSet が読み込まれた XML ドキュメントに割り当てられた後に、DataSet のテーブルを追加または削除することはできません。
XmlDataDocument オブジェクトにバインドされているデータセットからデータを消去するには、テーブル内を検索して DataRow オブジェクトを個別に削除する必要があります。データ テーブルからのデータ行の削除の詳細については、「方法 : DataTable の行を削除する」と DataRowCollection.RemoveAt メソッドを参照してください。
[データ ソース] ウィンドウから項目をドラッグする際にキャプション ラベルが正しくない
[データ ソース] ウィンドウから項目をドラッグする際に、既定の正規表現に基づいて列名が変更されます。小文字の後に大文字が続く文字列が列名に含まれる場合は、2 つの単語を分けるためのスペースが追加されます。さらに、列名に含まれるすべてのアンダースコアがスペースで置き換えられます。この動作を制御する方法の詳細については、「方法 : Visual Studio がデータ バインド コントロールのキャプションを作成する方法をカスタマイズする」を参照してください。
データのフェッチおよび表示が遅く感じられる
プロジェクトで BindingSource コンポーネント を使用している場合は、RaiseListChangedEvents を False に設定してみてください。これにより、ListChanged イベントがリストで発生しなくなり、大きなデータセットを扱うときのパフォーマンスが向上します。
Windows 2000 でのインストール後、アプリケーションの実行が失敗し、MDAC 2.8 が必要という警告が表示される
System.Data 名前空間を参照するアプリケーションは、MDAC (Microsoft Data Access Components) Version 2.8 以降を必要とします。ほとんどの場合、このファイルは、オペレーティング システムの一部として既にインストールされています。Windows 2000 Service Pack 3 以前を実行しているコンピュータでは、アプリケーションと共にコンポーネントをインストールすることが必要になる場合があります。これは、コンポーネントをブートストラップ パッケージに追加し、インストール時に Microsoft からファイルをダウンロードすることで実現できます。詳細については、「配置の必要条件 (Visual Studio)」を参照してください。
挿入または更新でデータベースによって生成された値が LINQ to SQL クラスで NULL を返す
LINQ to SQL は、ID 列 (自動インクリメント)、rowguidcol 列 (データベースが生成した GUID)、およびタイムスタンプ列であれば、データベースによって生成された値を自動的に処理します。その他の列型のデータベースによって生成された値は、予想に反して null 値になります。データベースによって生成された値を返すには、手動で IsDbGenerated を true に設定し、AutoSync を Always、OnInsert、または OnUpdate に設定する必要があります。