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

数据庫给出信息消息时,连接对象生成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();
            }

 
        }

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值