如何将 return 错误消息从 SQL 服务器发送到网页

How to return error message from SQL Server to web page

我目前正在做一个需要连接数据库的项目。查询数据库中数据的语法来自文本框上的用户输入。如果查询的用户输入产生错误,那么我需要 return 来自 SQL 服务器的错误消息,如果没有错误则查询结果(在本例中为 SELECT 语句)将显示在 grdiview 中。

上网查了下发现需要创建存储过程。我以前从来没有使用过存储过程,所以我不知道如何放置检索数据。

到目前为止,这是我的代码:

在SQL服务器中:

Create table tbl_dormproc
(
    [ID] int identity(1,1),
    [Name] varchar(150),
    [Date of Birth] date,
    [Address] varchar(100)
)

CREATE PROCEDURE dormproc(@syntax NVARCHAR(MAX))
AS
BEGIN
BEGIN TRY
    EXEC sp_executesql N'@syntax'
    SELECT NULL
END TRY
BEGIN CATCH
    SELECT ERROR_MESSAGE()
END CATCH
END
GO

在VB.NET申请中

Protected Sub btnCheck_Click(sender As Object, e As EventArgs) Handles btnCheck.Click
    Try
        cmd = New SqlCommand("dormproc", con)
        cmd.CommandType = CommandType.StoredProcedure
        cmd.Parameters.AddWithValue("@syntax", txtQuery.Text)

        drDataReader = cmd.ExecuteReader
        dtDatatable.Load(drDataReader)
        Gridview1.DataSource = dtDatatable
        Gridview1.DataBind()
    Catch ex As SqlException
        lblMsg.Text = ex.Message         
    End Try
End Sub

但是,它在 gridview 中产生错误 'must declare the scalar variable @syntax'。

我在上面的代码中设置了@syntax参数。

所以我认为代码没有读取参数。

另外为什么错误显示在 gridview 而不是 lblmsg.text 中?

我正在做的是return来自SQL服务器的错误到一个标签中。

例如:

select *, from tbl_dormproc

它产生一个结果:

Incorrect syntax near the keyword 'from'.

是否可以将整个查询传递到存储过程中?

通过浏览,目前我只找到了如何将某个列名传递给存储过程。

提前致谢。

您的 SP 中没有未处理的异常,因此您无法在客户端代码中捕获它。如果 SP 中出现异常,您的错误消息只是您的 SP 的结果集。您可以在第一行第一列的 dtDataTable 中找到它。 EXEC sp_executesql N'@syntax' 你应该检查一下语法。 @syntax 是可变的,因此应将其用作:

EXEC sp_executesql @syntax

查看 sp_executesql documentation 了解更多信息。

您没有正确使用 sp_executesql。

试试这个

CREATE PROCEDURE dormproc(@syntax NVARCHAR(MAX))
AS
BEGIN
    EXEC sp_executesql @syntax 
    SELECT NULL
END
GO