C# 如何从t-sql过程传递警告消息?
我用C代码调用这个过程。是否可能以某种方式将警告消息从过程传递给调用者,如调用或其他方式C# 如何从t-sql过程传递警告消息?,c#,sql,sql-server,tsql,C#,Sql,Sql Server,Tsql,我用C代码调用这个过程。是否可能以某种方式将警告消息从过程传递给调用者,如调用或其他方式 试试看 { if(connection.State!=ConnectionState.Open)connection.Open(); var cmd=connection.CreateCommand(); cmd.CommandTimeout=cfg.CmdTimeout; cmd.CommandType=CommandType.storedProcess; cmd.CommandText=“dbo.tes
试试看
{
if(connection.State!=ConnectionState.Open)connection.Open();
var cmd=connection.CreateCommand();
cmd.CommandTimeout=cfg.CmdTimeout;
cmd.CommandType=CommandType.storedProcess;
cmd.CommandText=“dbo.test”;
var ParamReturn=cmd.Parameters.Add(“@RETURN\u VALUE”,SqlDbType.Int);
ParamReturn.Direction=ParameterDirection.ReturnValue;
cmd.ExecuteNonQuery();
}
捕获(例外情况除外)
{
MessageBox.Show(例如Message,“Test”);
}
创建过程测试
像
开始
不计数;
NOWAIT的RAISERROR(N'Kuku1',0,0)
选择@@VERSION作为'@@VERSION'
NOWAIT的RAISERROR(N'Kuku2',0,0)
选择@LANGID作为'@@LANGID'
带NOWAIT的RAISERROR(N'Pisec',0,0)
返回@连接
终止
去
您可以通过连接的InfoMessage
属性读取消息(通过PRINT
或RAISERROR
发送,严重性为10或以下):
using (var command = new SqlCommand(query, connection))
{
command.CommandTimeout = 0;
var infoCaptureHandler = new SqlInfoMessageEventHandler((sender, args) =>
{
if (!String.IsNullOrWhiteSpace(args.Message))
{
Console.WriteLineLine(args.Message);
}
});
connection.InfoMessage += infoCaptureHandler;
try
{
command.ExecuteReader();
}
finally
{
connection.InfoMessage -= infoCaptureHandler;
}
}
您可以通过连接的InfoMessage
属性读取消息(通过PRINT
发送,或通过RAISERROR
发送,严重程度不超过10):
using (var command = new SqlCommand(query, connection))
{
command.CommandTimeout = 0;
var infoCaptureHandler = new SqlInfoMessageEventHandler((sender, args) =>
{
if (!String.IsNullOrWhiteSpace(args.Message))
{
Console.WriteLineLine(args.Message);
}
});
connection.InfoMessage += infoCaptureHandler;
try
{
command.ExecuteReader();
}
finally
{
connection.InfoMessage -= infoCaptureHandler;
}
}
严重性为10或以下的
RAISERROR
也会触发Infomessage
,因此问题中的代码也会触发它PRINT
的严重性为0。严重性为10或以下的RAISERROR
也会触发Infomessage
,因此问题中的代码也会触发它<代码>打印的严重性为0。