如何获取SQL中Print语句输出内容
SqlConnection cn = new SqlConnection("server=my\\my2005;database=rdwhdata2005;user id=zjh;password=321321");
List<string> lis = new List<string>();
void info(object o, SqlInfoMessageEventArgs ar)
{
foreach (SqlError r in ar.Errors)
{
//MessageBox.Show(r.Message);
lis.Add("从 SQL Server 中获取一个数值错误代码,它表示错误、警告或“未找到数据”消息。"+r.State.ToString());
lis.Add("获取生成错误的提供程序的名称。"+r.Source.ToString());
lis.Add("获取生成错误的 SQL Server 实例的名称。"+r.Server.ToString());
lis.Add("获取生成错误的存储过程或远程过程调用 (RPC) 的名称。"+r.Procedure.ToString());
lis.Add("获取一个标识错误类型的数字。"+r.Number.ToString());
lis.Add("获取对错误进行描述的文本。"+r.Message.ToString());
lis.Add("从包含错误的 Transact-SQL 批命令或存储过程中获取行号。"+r.LineNumber.ToString());
lis.Add("获取从 SQL Server 返回的错误的严重程度。"+r.Class.ToString());
}
}
/* 测试存储过程中的Print打出的错误信息
create proc testproc
as
print 'this is test textproc';
*/
private void button1_Click(object sender, EventArgs e)
{
cn.InfoMessage += new SqlInfoMessageEventHandler(info);
cn.Open();
SqlCommand cmd = new SqlCommand("testproc", cn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.ExecuteNonQuery();
cn.Close();
//执行完后就有 MessageBox.Show(r.Message);的结果
for (int i = 0; i < lis.Count; i++)
{
listBox1.Items.Add(lis[i].ToString());
}
}
上一篇: SQL 手工注射原理小结