如何将 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
我目前正在做一个需要连接数据库的项目。查询数据库中数据的语法来自文本框上的用户输入。如果查询的用户输入产生错误,那么我需要 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