0

強く型付けされたデータセットとストアドプロシージャを使用するアプリを開発してきました。私は卒業したばかりで、これが道として私たちに売られた方法でした。私は深刻な疑問を持ち始めています。

クライアントから、SQLServerからMySQLに変更する可能性があるとのアドバイスがありました。私が読んだことから、移行がより困難になる可能性があるため、ストアドプロシージャを使用しない方がよい場合があります。とにかく、ウィザードを使用して新しいテーブルアダプタクエリを実装し、[新しいストアドプロシージャを作成するのではなく、SQLステートメントを使用する]を選択しました。

クエリへの呼び出し

Intranet.administratorsDataTable dt = taAdministrators.GetAdministrators();

ここで、このエラーが生成されます。

executereaderには、開いていて利用可能な接続が必要です。接続の現在の状態は閉じています

この自動生成されたコードに接続がない理由がわかりません。二日酔いで、これに対処することができません。作業を行うために、とりあえずSPに戻ることにしました。このエラーは引き続きスローされます(同じテーブルアダプター、同じメソッド名ですが、SPを使用するように再構成されています)。他のすべてのDB呼び出しは正常に機能します。

SPを使用するようにアダプタを変更したにもかかわらず、生成されたSQLコードがまだどこかに浮かんでいると思います。誰かがそれがどこにあるか教えてもらえますか?それで私はそれを削除できますか?

別の注意点として、私はSqlConnectionとSqlCommandを手動で使用する方がはるかに優れたオプションであると考え始めています。これらのクエリ「ツール」を使用すると、データベーステーブルの変更などの柔軟性に関して、多くの問題が発生する可能性があります。あなたはより経験豊富な人々がそれが正しいかどうか教えてくれますか、それともテーブルアダプターの使用を提唱していますか?

*編集 すると次もスローされます:

操作が無効です。接続が閉じられます。

このコマンドに関連付けられている開いているDataReaderがすでにあり、最初に閉じる必要があります。

4

2 に答える 2

1

解決策は、tableAdapterのクエリプロパティに移動し、「コマンドタイプ」を手動でStoredProcedureに変更することでした。

クエリを強調表示>プロパティウィンドウに移動>コマンドタイプを変更

クエリを再構成したときに、これが自動更新されなかった(または自動更新されなかった)ようです。

于 2013-02-04T08:12:33.140 に答える
0

あなたがいくつかのコードを提供するならば、それはより良いでしょう。接続を開く必要があると思います。

SqlCommand Cmd= new SqlCommand();
Cmd.Open();
// then u can use Cmd.ExecuteReader(); 
于 2013-02-02T05:49:48.793 に答える