1

最初に詳細を挿入し、最後にテーブルを返すストアド プロシージャを呼び出すことは可能ですか。現在、私は 2 つのストアド プロシージャを作成しました。1 つは挿入用で、もう 1 つは詳細を取得するためです。今、私は両方を同時にやろうとしています。

ExecuteScalar挿入とExecuteDataSet選択に使用しています。

4

3 に答える 3

2

ストアド プロシージャが SELECT を使用してデータを返す場合 (もちろん、そのデータを読み取る必要があると思います)、Fill メソッドで SqlDataAdapter を使用するか、SqlCommand で ExecuteReader を使用して SqlDataReader を使用する必要があります。

実行リーダー:

using(SqlConnection cn = new SqlConnection(...))
using(SqlCommand cmd = new SqlCommand(procName, cn))
{
    cmd.CommandType = CommandType.StoredProcedure;
    cn.Open()
    using(SqlDataReader r = cmd.ExecuteReader())
    {
        while(r.Read())
        {
            // read every row and use the field values .....
        }

    }    
}

SqlDataAdapter.Fill:

using(SqlConnection cn = new SqlConnection(...))
using(SqlCommand cmd = new SqlCommand(procName, cn))
{
    cmd.CommandType = CommandType.StoredProcedure;
    cn.Open()
    using(SqlDataAdapter da = new SqlDataAdapter(cmd)
    {
        DataTable dt = new DataTable();
        da.Fill(dt);

        // DataTable filled with the data returned by the last SELECT in your SP
        ......
    }    
}

SqlCommand.ExecuteReaderまたはSqlDataAdapter .Fill は、ストアド プロシージャの動作を確認せずにストアド プロシージャを実行しますが、ある種の表形式のデータが返されてループすることを期待しています。

于 2013-10-03T10:47:05.127 に答える
0

このような手順を書きます

CREATE PROCEDURE SP_Name
(
 //PARAMETES
)
AS
BEGIN

//INSERT STATEMENT

//SELECT STATEMENT

END

そして ExecuteDataSet() を呼び出します

于 2013-10-03T10:43:05.673 に答える
-2
SqlConnection cn = new SqlConnectio(...)
SqlCommand cmd = new SqlCommand("procName", cn)
 {
     cmd.CommandType = CommandType.StoredProcedure;
     cn.Open();
     cmd.ExecuteScalar();
 }
于 2013-10-03T10:54:19.257 に答える