最初に詳細を挿入し、最後にテーブルを返すストアド プロシージャを呼び出すことは可能ですか。現在、私は 2 つのストアド プロシージャを作成しました。1 つは挿入用で、もう 1 つは詳細を取得するためです。今、私は両方を同時にやろうとしています。
ExecuteScalar
挿入とExecuteDataSet
選択に使用しています。
最初に詳細を挿入し、最後にテーブルを返すストアド プロシージャを呼び出すことは可能ですか。現在、私は 2 つのストアド プロシージャを作成しました。1 つは挿入用で、もう 1 つは詳細を取得するためです。今、私は両方を同時にやろうとしています。
ExecuteScalar
挿入とExecuteDataSet
選択に使用しています。
ストアド プロシージャが 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 は、ストアド プロシージャの動作を確認せずにストアド プロシージャを実行しますが、ある種の表形式のデータが返されてループすることを期待しています。
このような手順を書きます
CREATE PROCEDURE SP_Name
(
//PARAMETES
)
AS
BEGIN
//INSERT STATEMENT
//SELECT STATEMENT
END
そして ExecuteDataSet() を呼び出します
SqlConnection cn = new SqlConnectio(...)
SqlCommand cmd = new SqlCommand("procName", cn)
{
cmd.CommandType = CommandType.StoredProcedure;
cn.Open();
cmd.ExecuteScalar();
}