1

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# コード:

public void store(object sender, EventArgs ser)
{
    try
    {
        // c reate and open a connection object
        SqlConnection conn = Class3.GetConnection();

        // 1. create a command object identifying the stored procedure
        SqlCommand cmd = new SqlCommand("storeprocedure3", conn);

        // 2. set the command object so it knows to execute a stored procedure
        cmd.CommandType = CommandType.StoredProcedure;

        // 3. add parameter to command, which will be execute the command
        SqlDataReader rdr = cmd.ExecuteReader();

        // iterate through results, printing each to console
        while (rdr.Read())
        {
            Label9.Text = rdr["menuename"].ToString();
        }
    }
    catch (Exception sa)
    {
        Console.WriteLine(sa);
    }
}

ストアド プロシージャ:

CREATE PROCEDURE procedure3     
AS
BEGIN
    select menuename from menue;

END
GO
4

3 に答える 3

5

プログラムに不一致があります(procedure3storeprocedure3 )

このコードを使用する

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

接続を閉じます

 SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
于 2012-06-26T11:51:28.967 に答える
5

IMO、これが最大かつ最も可能性の高い問題です。

catch (Exception sa)
{
    Console.WriteLine(sa);
}

何が悪いのかをあなたに伝えようと一生懸命努力していると思いますが、あなたはそれを黙らせまし/これには何の理由もありません。それが機能しない場合は、何かが非常に間違っています - エラーにしましょう。例外の詳細を読みます。trycatch

もし私がうるさいなら (そして、率直に言って、私はそうです) -ここにはもっと多くのものが必要です。using

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...
    }
}
于 2012-06-26T11:53:58.610 に答える
2

EXEC procedure結果が出ますか?

また、storeprocedure3実際にはプロシージャ名がprocedure3

行を次のように変更します。

SqlCommand cmd = new SqlCommand("procedure3", conn);
于 2012-06-26T11:55:07.637 に答える