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