gpt4 book ai didi

sql-server - SQL 存储过程和错误处理

转载 作者:行者123 更新时间:2023-12-02 05:03:14 24 4
gpt4 key购买 nike

我一直使用存储过程。但我从未在存储过程中使用过错误处理程序。我刚刚开始了解错误处理程序。我试图在我的存储过程中这样做,但我从未在我的应用程序中收到错误消息。我在下面给出我的存储过程

ALTER PROCEDURE   [dbo].[E_AddDesignation]

@Designation nvarchar(100),
@Order int

AS
BEGIN
SET NOCOUNT ON;
DECLARE @myRowCount int

SELECT DesignationID FROM Designation WHERE (DesignationName = @Designation)
SET @myRowCount=@@ROWCOUNT
IF(@myRowCount ! = 0)
BEGIN
RAISERROR('Already exists',5,1)
END
ELSE
BEGIN
insert into Designation(DesignationName,DesignationOrder) values (@Designation,@Order)
RAISERROR('Submitted Successfully',5,1)
END
SET NOCOUNT OFF;
END

我正在尝试调用存储过程并获取如下错误消息。

Try            
c.con.Open()
c.cm = New SqlCommand("E_AddDesignation", c.con)
c.cm.CommandType = CommandType.StoredProcedure
c.cm.Parameters.Add("@Designation", SqlDbType.NVarChar).Value = Designation
c.cm.Parameters.Add("@Order", SqlDbType.Int).Value = Order
c.cm.ExecuteNonQuery()
c.con.Close()
Catch ex As SqlException
Console.WriteLine(ex)
End Try

我在某处做错了什么。请帮我找出错误。

最佳答案

在您的代码中,您引发了严重性为 10 的错误。

 RAISERROR('Already exists',5,1)

因此 SQLConnection 会将其视为 InfoMessage 而不是异常。当 SQL Server 返回严重级别为 10 或更低的消息时,将发生 InfoMessage 事件。严重程度介于 11 和 20 之间的消息会引发错误,严重程度超过 20 的消息会导致连接关闭。请查看here

您可能想要检查数据库错误严重性 here

您可以连接信息消息事件,如下所示:

// Assumes that connection represents a SqlConnection object.
connection.InfoMessage += new SqlInfoMessageEventHandler(OnInfoMessage);

protected static void OnInfoMessage(object sender, SqlInfoMessageEventArgs args)
{
foreach (SqlError err in args.Errors)
{
Console.WriteLine("The {0} has received a severity {1}, state {2} error number {3}\n" +
"on line {4} of procedure {5} on server {6}:\n{7}",
err.Source, err.Class, err.State, err.Number, err.LineNumber,
err.Procedure, err.Server, err.Message);
}
}

更多信息请查看this

要处理存储过程本身的异常,您可以使用 SQL Server 2005 及更高版本的 Try..Catch block 。

编辑:您可能需要查看 this这表明

如何:从 ADO.NET 中的 SQL Server 存储过程返回错误和警告

希望对您有所帮助!

关于sql-server - SQL 存储过程和错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16687127/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com