用InfoMessage事件记录所有数据庫消息

来源:互联网 发布:云言秒赞网源码 编辑:程序博客网 时间:2024/05/21 21:01
数据庫给出信息消息时,连接对象生成InfoMessage事件。信息消息不是来自数据庫的错误消息。它们是数据庫发出的警告消息。也是PRINT SQL语句的输出。对于严重性级别等于10或者小于10的任何消息都认为是信息消息,使用InfoMessage事件捕捉。
InfoMessage事件处理程序接收InfoMessageEventArgs对象,其Errors集合属性中含有来自数据源的消息集合。该集合中的Error对象具有SqlError类型,可以此进行查询,以得到数目,来源,消息以及存储过程中发出这个消息的确切行号等信息。我们这里运行一条SQL的PRINT语句。



  //事件处理程序,其签名与委托SqlInfoMessageEventHandler相同
 
private void cnInfoMessage(object sender, SqlInfoMessageEventArgs e)
        
{
            
foreach(SqlError err in e.Errors)
            
{
                lbResult.Items.Add(
"-----");
                lbResult.Items.Add(
"Entering InfoMessage Event Handler");
                lbResult.Items.Add(
"Source:" + err.Source);
                lbResult.Items.Add(
"State:" + err.Number);
                lbResult.Items.Add(
"Number:" + err.Procedure);
                lbResult.Items.Add(
"Server:" + err.Server);
                lbResult.Items.Add(
"Message:" + err.Message);
                lbResult.Items.Add(
"Exiting InfoMessage Event Handler");
                lbResult.Items.Add(
"-----");
            }


        }


        
private void cmdCnInfoMsg_Click(object sender, EventArgs e)
        
{
            SqlConnection cn 
=
               
new SqlConnection(@"Data Source=localhost;Integrated Security=SSPI;database=Northwind");

            SqlCommand cmd 
= new SqlCommand();
            
//PINT语句不返回任何行
            cmd.CommandText = "PRINT 'Get CustomerId for all customers'";
            cmd.Connection 
= cn;
               //把
cnInfoMessage函数指定为InfoMessage事件的事件处理程序
            cn.InfoMessage += new SqlInfoMessageEventHandler(cnInfoMessage);
            
try
            
{

                cn.Open();
                SqlDataReader dr 
= cmd.ExecuteReader();

                
while (dr.Read())
                
{
                    lbResult.Items.Add(dr.GetString(
0));
                }


            }

            
catch (SqlException se)
            
{
                MessageBox.Show(se.Message);

            }

            
finally
            
{
                cn.Close();
            }

 
        }

    }
}
原创粉丝点击