[问题] C# 呼叫Stored procedure 疑问

楼主: KSmart (经济不景气,好景不常在)   2015-11-24 23:42:29
最近刚好有空可以将之前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] 字串转换型别错误? <==有点忘记错误讯息了...
麻烦各位前辈指点了。
作者: soup514   2015-11-25 15:58:00
1.就是procedure订的参数名称 @看db sqlserver就要2.有默认型别 但建议要给 型别转换很常发生查询效率不好的问题3.size是binary和string时用的

Links booklink

Contact Us: admin [ a t ] ucptt.com