Asp.net 如何在VB中显示SQL存储过程?
我正在使用SSMS2008和VB。我是一个VB开发新手。我试图在我的ASPX页面上显示一个简单的存储过程的结果。但我得到下面的错误。以下是我的ASPX页面代码:Asp.net 如何在VB中显示SQL存储过程?,asp.net,sql,vb.net,stored-procedures,namespaces,Asp.net,Sql,Vb.net,Stored Procedures,Namespaces,我正在使用SSMS2008和VB。我是一个VB开发新手。我试图在我的ASPX页面上显示一个简单的存储过程的结果。但我得到下面的错误。以下是我的ASPX页面代码: > MsgBox(GlobalFunctions.GlobalF.GetDevSQLServerStoredProcedure()) 以及GlobalF命名空间中的我的代码: Public Shared Function GetDevSQLServerStoredProcedure() Dim con
> MsgBox(GlobalFunctions.GlobalF.GetDevSQLServerStoredProcedure())
以及GlobalF命名空间中的我的代码:
Public Shared Function GetDevSQLServerStoredProcedure()
Dim conn As SQLConnection
Dim DSPageData As New System.Data.DataSet
conn = New SQLConnection(ConfigurationSettings.AppSettings("AMDMetricsDevConnectionString"))
Dim cmd As New SQLCommand
cmd.CommandType = CommandType.StoredProcedure
cmd.Connection = conn
cmd.CommandText = "AllTableCount"
Dim da = New SQLDataAdapter(cmd)
da.Fill(DSPageData)
Return DSPageData
End Function
我的错误是:
无法转换参数“Prompt”
键入“字符串”
[ArgumentException:参数'Prompt'
无法转换为类型“字符串”。]
Microsoft.VisualBasic.Interaction.MsgBox(对象
提示、MsgBoxStyle按钮、对象
标题)+320ASP.website\u complaints\u complainttrendinglist3\u aspx.Main() 在里面 e:\inetpub\amdmetrics-d.web.abbott.com\wwwroot\Website\Complaints\ComplaintTrendingList3.aspx:113 ASP.website\u complaints\u complainttrendinglist3\u aspx.Page\u Load(对象 发件人,事件参数(E)在 e:\inetpub\amdmetrics-d.web.abbott.com\wwwroot\Website\Complaints\ComplaintTrendingList3.aspx:60 System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp、对象o、对象t、事件参数e) +14 System.Web.Util.CallEventHandlerDelegateProxy.Callback(对象 发送方,事件参数e)+35
System.Web.UI.Control.OnLoad(EventArgs e) +99
System.Web.UI.Control.LoadRecursive() +50 System.Web.UI.Page.ProcessRequestMain(布尔值 includeStagesBeforeAsyncPoint,布尔值 includeStagesAfterAsyncPoint)+627 此存储过程只返回数据库中的记录数。但我想执行其他返回表的存储过程。如何在没有错误的情况下实现这一点 最后,我的新SQL SP:
CREATE proc [dbo].PrintTestMsg AS BEGIN
PRINT 'HELLO'
PRINT 'WORLD'
PRINT 'PAGE3'
PRINT 'PAGE4'
END
SELECT * FROM SELECT (EXEC PrintTestMsg)
我在SSMS中使用上述选择时出现语法错误
下面的代码是什么?现在可以给我一个数据集吗
private string DatasetToString(DataSet ds)
{
StringBuilder sb = new StringBuilder();
DataTable dt = ds.Tables(0);
foreach (DataRow dr in dt.Rows) {
sb.Append(“;”);
sb.Append(dt.Rows(1).ToString());
}
return sb.ToString();
}
不要担心将数据集转换为字符串。这里真正的问题是根本无法在asp.net中使用普通的MsbBox()函数。真正地如果您尝试,它将在web服务器上隐藏的专用桌面上显示消息。它不会在用户的机器上弹出消息。不仅如此,它在点击之前都会被屏蔽,而且因为它位于隐藏的桌面上,所以这种情况永远不会发生。结果是用户的页面永远不会加载 您要做的是将
GetDevSQLServerStoredProcedure()
方法的结果绑定到GridView、DataGrid或Repeater控件。您的代码中还存在其他问题,因此我将对每个部分进行快速清理,以向您展示它的外观:
''#Always list the type returned at the end of the method name
Public Shared Function GetDevSQLServerStoredProcedure() As DataSet
Dim DSPageData As New System.Data.DataSet
''# A Using block will ensure the .Dispose() method is called for these variables, even if an exception is thrown
''# This is IMPORTANT - not disposing your connections properly can result in an unrespsonsive database
Using conn As New SQLConnection(ConfigurationSettings.AppSettings("AMDMetricsDevConnectionString")), _
cmd As New SQLCommand("PrintTestMsg", conn), _
da As New SQLDataAdapter(cmd)
cmd.CommandType = CommandType.StoredProcedure
da.Fill(DSPageData)
End Using
Return DSPageData
End Function
现在,您的存储过程。这不会返回任何内容,因此我添加了代码以将打印的数据返回到页面:
CREATE proc [dbo].PrintTestMsg AS BEGIN
PRINT 'HELLO'
PRINT 'WORLD'
PRINT 'PAGE3'
PRINT 'PAGE4'
SELECT 'HELLO' AS Msg
UNION
SELECT 'WORLD'
UNION
SELECT 'PAGE3'
UNION
SELECT 'PAGE4'
END
您需要将其添加到您的aspx标记中:
<asp:GridView ID="PrintMessageGrid" runat="server" AutoGenerateColumns="True" />
请注意,从基本意义上讲,这就足以让事情正常运行,这样您就可以继续探索ASP.Net了。我刚刚发布的一些技术我永远不会在生产网站上使用。示例包括GridView中的AutoGenerateColumns甚至数据集(datareader几乎总是一个更好的选择)。这只是对原始代码的最小更改,这样您就可以开始拼凑起来,并在更多的实践中学习更好的技术。不要担心将数据集转换为字符串。这里真正的问题是根本无法在asp.net中使用普通的MsbBox()函数。真正地如果您尝试,它将在web服务器上隐藏的专用桌面上显示消息。它不会在用户的机器上弹出消息。不仅如此,它在点击之前都会被屏蔽,而且因为它位于隐藏的桌面上,所以这种情况永远不会发生。结果是用户的页面永远不会加载 您要做的是将
GetDevSQLServerStoredProcedure()
方法的结果绑定到GridView、DataGrid或Repeater控件。您的代码中还存在其他问题,因此我将对每个部分进行快速清理,以向您展示它的外观:
''#Always list the type returned at the end of the method name
Public Shared Function GetDevSQLServerStoredProcedure() As DataSet
Dim DSPageData As New System.Data.DataSet
''# A Using block will ensure the .Dispose() method is called for these variables, even if an exception is thrown
''# This is IMPORTANT - not disposing your connections properly can result in an unrespsonsive database
Using conn As New SQLConnection(ConfigurationSettings.AppSettings("AMDMetricsDevConnectionString")), _
cmd As New SQLCommand("PrintTestMsg", conn), _
da As New SQLDataAdapter(cmd)
cmd.CommandType = CommandType.StoredProcedure
da.Fill(DSPageData)
End Using
Return DSPageData
End Function
现在,您的存储过程。这不会返回任何内容,因此我添加了代码以将打印的数据返回到页面:
CREATE proc [dbo].PrintTestMsg AS BEGIN
PRINT 'HELLO'
PRINT 'WORLD'
PRINT 'PAGE3'
PRINT 'PAGE4'
SELECT 'HELLO' AS Msg
UNION
SELECT 'WORLD'
UNION
SELECT 'PAGE3'
UNION
SELECT 'PAGE4'
END
您需要将其添加到您的aspx标记中:
<asp:GridView ID="PrintMessageGrid" runat="server" AutoGenerateColumns="True" />
请注意,从基本意义上讲,这就足以让事情正常运行,这样您就可以继续探索ASP.Net了。我刚刚发布的一些技术我永远不会在生产网站上使用。示例包括GridView中的AutoGenerateColumns甚至数据集(datareader几乎总是一个更好的选择)。这只是对原始代码的最小更改,这样您就可以开始拼凑起来,并随着练习的深入学习更好的技术。您正在返回一个数据集。您需要对该数据集进行一些解析,以提取希望MsgBox显示的字符串哦,我明白您的意思了。让我试试!普雷斯科特,我明白为什么我需要为MsgBox返回字符串了。但是,我试图从SSMS中存储的proc中返回第一行,但得到了语法错误。如何修改此查询以仅返回第一行?请参见上面的编辑
从SELECT(EXEC PrintTestMsg)
中选择TOP 1*。此外,您可能需要稍微更改代码,'foreach(Dt.Rows中的数据行dr){sb.Append(;”);sb.Append(dr(0.ToString());{您正在返回一个数据集。您需要对该数据集进行一些分析,以提取希望MsgBox显示的字符串。哦,我明白您的意思了。让我试试!普雷斯科特,我明白为什么我需要返回MsgBox的字符串。但是,我正试图从SSMS中存储的进程中返回第一行,但出现语法错误。我如何修改将此查询设置为只返回第一行?请参见上面的编辑SELECT(EXEC PrintTestMsg)
另外,您可能需要稍微更改代码,'foreach(Dt.Rows中的DataRow dr){sb.Append(;”);sb.Append(dr(0.ToString());{非常感谢,Joel!但是,当我尝试此操作时,我遇到了一个新错误:没有声明名称'GetDevSQLServerStoredProcedure'。您知道应该声明为什么类型吗?这里的类型很好-问题是您将其放在何处。请确保它在您的page类中。否则,您必须