ADO.NETを介してSQL Serverの「副産物メッセージ」にアクセスできますか?言葉がないため、「副産物メッセージ」とは、Microsoft SQL Server Management Studioの[メッセージ]タブに表示される出力を意味します。私が特に気にしているのは、SET STATISTICS TIME ONの出力を読むことです。 SqlDataReaderはこの点について何も提供していないようです。ADO.NETを介したSQL Serverメッセージへのアクセス
答えて
はい、あなたはにフックすることができますSqlInfoMessage
呼ばSqlConnection
クラス上のイベントがあります:
SqlConnection _con =
new SqlConnection("server=.;database=Northwind;integrated Security=SSPI;");
_con.InfoMessage += new SqlInfoMessageEventHandler(InfoMessageHandler);
イベントハンドラは次のようになります。
static void InfoMessageHandler(object sender, SqlInfoMessageEventArgs e)
{
string myMsg = e.Message;
}
e.Message
が印刷されたメッセージでありますSQL Server Management Studioのメッセージウィンドウに表示されます。
上記のご返信ありがとうございます。私はちょっと実験をして、マルチレコードセットの結果からメッセージ(この場合はSET STATISTICS TIME ONによって生成されたもの)を読むときに予期せぬ小さな不具合(バグ?以下に示すように、最後のメッセージを取得するために、最後の結果セットの後でもNextResultを呼び出す必要があります。これは、単一レコードセットの結果の場合には必要ありません。
using System;
using System.Data.SqlClient;
namespace TimingTest
{
class Program
{
static void Main(string[] args)
{
SqlConnection conn = new SqlConnection("some_conn_str");
conn.Open();
conn.InfoMessage += new SqlInfoMessageEventHandler(Message);
SqlCommand cmd = new SqlCommand("some_sp", conn);
cmd.CommandType = System.Data.CommandType.StoredProcedure;
SqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read()) { };
rdr.NextResult();
while (rdr.Read()) { };
// this is needed to print the second message
rdr.NextResult();
rdr.Close();
conn.Close();
}
static void Message(object sender, SqlInfoMessageEventArgs e)
{
Console.Out.WriteLine(e.Message);
}
}
}
これは、別の質問への回答としては素晴らしいでしょう。 "複数の結果セットを返すクエリを実行した後に、最後の情報メッセージを取得するにはどうすればよいですか?"または同様のもの。 –
誰も知らないコードのコメントとして、空のwhileループは次のように書くこともできます: 'while(rdr.Read());' –
- 1. WebサービスのIISまたは軸を介したSQL Serverへのアンドロイドのアクセス?
- 2. ADO.NET Data Serviceクライアントライブラリを使用したSQLデータサービスへのアクセス
- 3. リモートSQL Serverデータベースへのアクセス
- 4. SQLIteデータベースを介したオブジェクトへのアクセス
- 5. SQL ServerとSQL Server Compactの同じado.netコードを書くには?
- 6. SQL Server 2005からのパススルークエリへのアクセス
- 7. SQL ServerのタイムアウトASP.NETプロファイルプロバイダへのアクセス
- 8. SQL ServerとADO.NETのトランザクションの違いは?
- 9. メールを介してSQL Server 2000
- 10. ADO.NET:オープンSQL接続
- 11. SQL Serverはローカルサーバーへのアクセスのみを制限します
- 12. ADO.Netデータサービスを使用したLinqからSQLへ
- 13. SQL Serverへのアクセスを許可しますか?
- 14. SQL Server 2005メッセージのローカライゼーション
- 15. VBA - 別のオブジェクト(プロパティセット)を介したオブジェクトプロパティへのアクセス
- 16. SQLクエリを介してSQL Serverスキーマを取得しますか?
- 17. JDBCを介した階層データへのアクセス
- 18. クラスのオブジェクトへのポインタを介して "スーパー"へのアクセス
- 19. ネットワークを介したメッセージの同期
- 20. SQL Serverの静的変数へのアクセスを同期するSQLCLR
- 21. SQL Server 2005のアプリケーションロールへのアクセス許可を付与する
- 22. ログイン(ユーザー)を与えるSQL Server db_ownerデータベースへのアクセス
- 23. Sql Server Analysis Servicesアクセス
- 24. ExcelデベロッパーへのアクセスまたはSQL Developerへのアクセス?
- 25. クエリ専用のMVC 3 + Entity Frameworkの外部SQL Serverへのアクセス
- 26. アクセスDBからSQL Serverへのテーブルのコピー
- 27. へのアクセスSQLデータベース
- 28. 最適なMSアクセスのためのオプションADOからSQL Serverへの接続パフォーマンス
- 29. SQL Server CREATE TABLEをアクセス
- 30. の構成SQL Serverアクセス
+1です。 ADO(OnInfoMessage)の私の鼻の下に10年以上ありました。私はちょうどそれが何であるか感謝しなかった。 –