您好:
之前有用過在C#內,使用PROC ,但PORC有OUTPUT回傳參數 來取的內部執行的結果
cmd.Parameters.Clear();
cmd.CommandType = CommandType.StoredProcedure;
rtn = cmd.Parameters.Add("@rtn", SqlDbType.VarChar, 100);
rtn.Direction = ParameterDirection.Output;
cmd.ExecuteNonQuery(); //執行
而這一個proc 內,有多個取號proc,這個取號會先在 實際TABLE 內 寫入一筆資料,回傳號碼
exec sp_Autonum @V_24 , @whno_trg, @upddate, @sTable, @vField, @DoIns, @d_24 output
以上在SQL 及 C#內可以過
========
我想改用以下方式來做
cmd.Parameters.Clear();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "SP_1111";
cmd.Parameters.Add("@whno", SqlDbType.VarChar, 4).Value = whno;
cmd.Parameters.Add("@manudate", SqlDbType.VarChar, 7).Value = manudate;
SqlDataReader dr = cmd.ExecuteReader();
//建立DataTable物件
DataTable table1 = new DataTable();
//DataReader物件載入DataTable
table1.Load(dr);
但是到了 exec sp_Autonum 這一段 就卡住了 (單獨在SQL 內跑 可正常RUN)
我又另外 試過 在
SqlDataReader dr = cmd.ExecuteReader();
這情況下
MS PROC 內用
select *
into #temp_x
from xx
select * from #temp_x
這樣可以過。
請問,若想要 C# 內 取得
proc 內最後一段
select xx '結果'
且裡面有 子PROC 去取號
不用OUTPUT的方式來做
有方法可做嗎?
謝謝
正常的方式下指令,因為沒output就不用寫
cmd.CommandText = "exec sp_Autonum @V_24 , @whno_trg, @upddate, @sTable, @vField, @DoIns, @d_24";
參數要寫上,要跟指令的數量、名稱一樣
cmd.Parameters.Add("@V_24", SqlDbType.VarChar, 4).Value = v24;
這行拿掉,讓他用一般的方式去跑
cmd.CommandType = CommandType.StoredProcedure;
最後就正常方式接收
SqlDataReader dr = cmd.ExecuteReader();
//建立DataTable物件
DataTable table1 = new DataTable();
//DataReader物件載入DataTable
table1.Load(dr);
您好:
有找到問題,參數錯誤
但又另一個問題
若proc 內引用另一個proc,若有select
proc-sub-1 select 'xx' 'a'
proc-sub-2 select 'yy' 'a'
select 'ZZ' '結果'
她table1 是 抓到 select 'xx' 'a' 的結果
如果會回應多個結果,那就需要接回多個結果,否則會接回第一個
using (SqlDataReader reader = command.ExecuteReader())
{
do
{
while (reader.Read())
{
// 這裡處理每個結果集的行數據
}
} while (reader.NextResult()); // 移動到下一個結果集
}