[問題] C# 呼叫Stored procedure 疑問

看板C_Sharp作者 (經濟不景氣,好景不常在)時間8年前 (2015/11/24 23:42), 編輯推噓0(004)
留言4則, 1人參與, 最新討論串1/1
最近剛好有空可以將之前VB6的程式碼翻成C#... 但是,原先舊有的VB6程式碼中,有去呼叫Oracle 的Stored procedure。 這地方嘗試許久總是百思不得其解,問周遭朋友也很少人會去呼叫 Stored procedure。 最後,還是想說上來問問各位前輩了。 ==> VB6 呼叫Stored procedure,並傳入3個參數,回傳3個參數 Dim DBCmd As ADODB.Command Set DBCmd = New ADODB.Command DBCmd.CommandText = "{call T_TEST_FLOW_USER.CREATE_USER_INDEX(?,?,?,'"& Trim(UserID) &"','"& UserBir &"','"& UserPW &"') }" DBCmd.Parameters.Append DBCmd.CreateParameter("nUserIdx",adChar.adParameterOutput,20 ) DBCmd.Parameters.Append DBCmd.CreateParameter("nUserNum",adInteger.adParameterOutput) DBCmd.Parameters.Append DBCmd.CreateParameter("nUserClass",adInteger.adParameterOutput) DBCmd.Execute , , adExecuteNoRecords strUserIdx = Trim(DBCmd.Parameter("nUserIdx")) UserNum = DBCmd.Parameter("nUserNum") UserClass = DBCmd.Parameter("nUserClass") Set DBCmd = Nothing ==>實際Oracle中的Procedure如下: Create OR REPLACE PACKAGE TEST.T_TEST_FLOW_USER IS PROCEDURE CREATE_USER_INDEX(strUserIdx OUT VARCHAR2,nUserNum OUT NUMBER, nUserClass OUT NUMBER,UserID IN VARCHAR2, UserBir IN VARCHAR2, UserPW IN VARCHAR2); PROCEDURE DELETE_USER_INDEX(??, ?? ,....,); PROCEDURE .... End T_TEST_FLOW_USER ==>轉換成C#版本... Command.Text = "TEST.T_TEST_FLOW_USER.CREATE_USER_INDEX"; Command.Type = StoredProcedure; <==這好像是這樣,有點忘了@@ DBParameter = DBCommand.CreateParameter(); DBParameter.ParameterName = ?? DBParameter.ParameterValue = ?? DBParameter.DBType = ?? DBParameter.Direction = Parameter.Direction.Output; DBParameter.Size = ?? DBCommand.Parameters.Add(DBParameter); 問題一: 針對Output的參數,ParameterName要怎麼寫? 隨便帶入一個變數名稱? 因為在VB6的話,是直接帶入一個字串"nUserIdx"..所以這邊有點不解? 是不是ParameterName 前方都需要加入 @ (例.DBParameter.ParameterName = "@User";) 問題二: 有"一定"需要針對每個參數去定義型別嗎?在VB6中,好像必須要定義,例如:adChar 問題三: 針對Output的參數,所有型別都"必須"指定Size嗎? 在VB6好像只有Char 才需要,Integer不用。 但是,如果再C#中,我的DBParameter.DBType = Data.Int32; 則會拋出例外,string[2] 字串轉換型別錯誤? <==有點忘記錯誤訊息了... 麻煩各位前輩指點了。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.39.102.153 ※ 文章網址: https://www.ptt.cc/bbs/C_Sharp/M.1448379752.A.47A.html

11/25 15:58, , 1F
1.就是procedure訂的參數名稱 @看db sqlserver就要
11/25 15:58, 1F

11/25 16:00, , 2F
2.有預設型別 但建議要給 型別轉換很常發生查詢效率不好
11/25 16:00, 2F

11/25 16:00, , 3F
的問題
11/25 16:00, 3F

11/25 16:01, , 4F
3.size是binary和string時用的
11/25 16:01, 4F
文章代碼(AID): #1ML8LeHw (C_Sharp)