iT邦幫忙

0

C# 使用MSSQL PROC 問題請教

  • 分享至 

  • xImage

您好:
之前有用過在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的方式來做

有方法可做嗎?
謝謝

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
jack8900
iT邦新手 2 級 ‧ 2024-04-22 11:03:48

正常的方式下指令,因為沒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);
noway iT邦研究生 2 級 ‧ 2024-04-23 09:39:30 檢舉

您好:
有找到問題,參數錯誤
但又另一個問題
若proc 內引用另一個proc,若有select

proc-sub-1 select 'xx' 'a'
proc-sub-2 select 'yy' 'a'

select 'ZZ' '結果'

她table1 是 抓到 select 'xx' 'a' 的結果

jack8900 iT邦新手 2 級 ‧ 2024-04-23 16:46:46 檢舉

如果會回應多個結果,那就需要接回多個結果,否則會接回第一個

using (SqlDataReader reader = command.ExecuteReader())
{
	do
	{
		while (reader.Read())
		{
			// 這裡處理每個結果集的行數據
		}
	} while (reader.NextResult()); // 移動到下一個結果集
}

我要發表回答

立即登入回答