C# C语言中的存储过程#

C# C语言中的存储过程#,c#,sql,.net,tsql,stored-procedures,C#,Sql,.net,Tsql,Stored Procedures,我想在c#中使用存储过程。我在sql server中创建存储过程,并在程序中调用它。但是当我使用断点特性时,我知道数据不会从数据库中检索,因为断点会跳过循环 .aspx代码: <asp:Button ID="Button1" runat="server" Text="Button" OnClick="store" /> <asp:Label ID="Label9" runat="server" Text="Label"></asp:Label> 存储过程:

我想在c#中使用存储过程。我在sql server中创建存储过程,并在程序中调用它。但是当我使用断点特性时,我知道数据不会从数据库中检索,因为断点会跳过循环

.aspx代码:

<asp:Button ID="Button1" runat="server" Text="Button" OnClick="store" />
<asp:Label ID="Label9" runat="server" Text="Label"></asp:Label>
存储过程:

CREATE PROCEDURE procedure3     
AS
BEGIN
    select menuename from menue;

END
GO

您的程序不匹配(procedure3vsstoreprocedure3

使用此代码

 SqlCommand cmd = new SqlCommand("procedure3 ", conn);
并关闭您的连接

 SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);

您的程序不匹配(procedure3vsstoreprocedure3

使用此代码

 SqlCommand cmd = new SqlCommand("procedure3 ", conn);
并关闭您的连接

 SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);

国际海事组织,这是最大也是最有可能的问题:

catch (Exception sa)
{
    Console.WriteLine(sa);
}
我想它很难告诉你出了什么问题,但你让它沉默了。没有任何理由尝试/
抓住
这一点;如果这不起作用,那就是出了问题——让它出错吧。阅读异常详细信息

如果我很挑剔(坦率地说,我是),你需要更多的
在这里使用
,也就是说

using(SqlConnection conn = Class3.GetConnection())
using(SqlCommand cmd = new SqlCommand("whatever", conn))
{
    cmd.CommandType = CommandType.StoredProcedure;
    using(SqlDataReader rdr = cmd.ExecuteReader())
    {
        while (rdr.Read())
        {
           // do something
        }
    }
}
或者,坦率地说,更简单的方法是使用像dapper这样的工具:

using(SqlConnection conn = Class3.GetConnection())
{
    foreach(var obj in conn.Query("whatever",
          commandType: CommandType.StoredProcedure))
    {
        string menuename = obj.menuename;
        // do something...
    }
}

国际海事组织,这是最大也是最有可能的问题:

catch (Exception sa)
{
    Console.WriteLine(sa);
}
我想它很难告诉你出了什么问题,但你让它沉默了。没有任何理由尝试
/
抓住
这一点;如果这不起作用,那就是出了问题——让它出错吧。阅读异常详细信息

如果我很挑剔(坦率地说,我是),你需要更多的
在这里使用
,也就是说

using(SqlConnection conn = Class3.GetConnection())
using(SqlCommand cmd = new SqlCommand("whatever", conn))
{
    cmd.CommandType = CommandType.StoredProcedure;
    using(SqlDataReader rdr = cmd.ExecuteReader())
    {
        while (rdr.Read())
        {
           // do something
        }
    }
}
或者,坦率地说,更简单的方法是使用像dapper这样的工具:

using(SqlConnection conn = Class3.GetConnection())
{
    foreach(var obj in conn.Query("whatever",
          commandType: CommandType.StoredProcedure))
    {
        string menuename = obj.menuename;
        // do something...
    }
}

EXEC程序
是否产生任何结果

此外,在代码中,您将存储过程引用为
storeprocedure3
,而实际上过程名称似乎是
procedure3

将行更改为:

SqlCommand cmd = new SqlCommand("procedure3", conn);

EXEC程序
是否产生任何结果

此外,在代码中,您将存储过程引用为
storeprocedure3
,而实际上过程名称似乎是
procedure3

将行更改为:

SqlCommand cmd = new SqlCommand("procedure3", conn);

如果直接在Sql Management Studio中对数据库运行存储过程,它是否会返回数据?我注意到您为属性指定了标量值:Label9.Text=rdr[“menuename”].ToString();在从存储过程中检索单个值的情况下,您应该考虑使用CMD.ExeCudiSCADARARE()代替CMD.ExECUTEADEDER()。是否有异常发生?(提示:
Console.WriteLine
在web应用程序中不是很有用)-连接是否以正确的用户身份执行?(
from menue
不明确-取决于用户)-何时运行?也;需要更多的
使用
…您是否尝试过直接对数据库运行您的过程(使用Sql Server Management Studio)以查看它是否真的返回任何行?另外,在ASP.Net项目中使用Console.WriteLine也没什么用处,确保在catch子句中也放置一个断点,以查看是否发生任何异常,然后找到更好的方法来处理异常。如果直接在Sql Management Studio中对数据库运行存储过程,是否会返回数据?我注意到,您为属性Label9.Text=rdr[“menuename”]。ToString指定了一个标量值();在从存储过程中检索单个值的情况下,您应该考虑使用CMD.ExeCudiCaseAdter()代替CMD.ExECUTeEADER():是否发生异常?(提示:<代码>控制台。WraveLe> <代码>在Web应用程序中不是非常有用)-连接是否作为正确的用户执行?(
来自菜单
不明确-取决于用户)-何时运行?还需要更多的
使用
…您是否尝试过直接针对数据库运行过程(使用Sql Server Management Studio)要查看它是否真的返回了任何行?另外,在ASP.Net项目中使用Console.WriteLine有点无用,请确保在catch子句中也放置一个断点,以查看是否发生任何异常,然后找到更好的方法来处理异常……如果这是一个C#存储过程,则连接将来自上下文,而您不会如果这是一个C#存储过程,连接将来自上下文,而您不必(想要)关闭或处理它