Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 如何在VB中显示SQL存储过程?_Asp.net_Sql_Vb.net_Stored Procedures_Namespaces - Fatal编程技术网

Asp.net 如何在VB中显示SQL存储过程?

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

我正在使用SSMS2008和VB。我是一个VB开发新手。我试图在我的ASPX页面上显示一个简单的存储过程的结果。但我得到下面的错误。以下是我的ASPX页面代码:

>           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按钮、对象 标题)+320
ASP.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类中。否则,您必须