ParameterDirection.ReturnValue与ParameterDirection

本文详细介绍了 OracleParameter 的方向属性设置,包括 Input、Output、InputOutput 和 ReturnValue 的使用场景和含义,帮助开发者正确配置存储过程及函数参数。
OracleParameter1.Direction   =
ParameterDirection.Input:指定参数是输入参数;
ParameterDirection.Output:指定参数是输出参数;
ParameterDirection.InputOutput:参数即可输入也可输出;
ParameterDirection.ReturnValue:存储过程/函数的返回值;  
.net framework 4.0 web forms vb pgsql 15.13 這是pgsql中一個存儲過程的頭部定義 CREATE OR REPLACE PROCEDURE bts.insertdndata( IN p_855id bigint, IN p_qty integer, IN p_user character varying, OUT result character varying) LANGUAGE 'plpgsql' AS $BODY$ 這是vb中的傳參調用方式 public static string InsertDNdata(string p_855id, string p_DNQty, string p_user) { var parameters = new NpgsqlParameter[] { new NpgsqlParameter("p_855id", NpgsqlDbType.Bigint) { Value = p_855id }, new NpgsqlParameter("p_qty", NpgsqlDbType.Integer) { Value = p_DNQty }, new NpgsqlParameter("p_user", NpgsqlDbType.Varchar, 200) { Value = p_user }, new NpgsqlParameter("result", NpgsqlDbType.Varchar) { Direction = ParameterDirection.ReturnValue }, }; return DbHelper.ExecuteStoredProcedure("InsertDNdata", parameters); } public static string ExecuteStoredProcedure(string procedureName, params NpgsqlParameter[] parameters) { using (var conn = new NpgsqlConnection(_connection)) { conn.Open(); var paramNames = string.Join(", ", parameters.Select(p => $"@{p.ParameterName}")); var callCommand = $"CALL {procedureName}({paramNames})"; using (var cmd = new NpgsqlCommand(callCommand, conn)) { cmd.CommandType = CommandType.Text; cmd.Parameters.AddRange(parameters); using (var transaction = conn.BeginTransaction()) try { cmd.ExecuteNonQuery(); transaction.Commit(); } catch(Exception ex) { transaction.Rollback(); return ex.Message; } return parameters.First(p => p.Direction == ParameterDirection.ReturnValue).Value?.ToString(); } } } 是有問題的,會報錯result不存在 我該如何修正?(必須用存儲過程) 代碼極簡化風格
08-01
Const STP_ログイン更新 As String = "CM_パスワード管理更新" Dim params As New List(Of SqlClient.SqlParameter) Dim tmpPrm As SqlParameter Dim index As Integer = 5 Dim rls As DBResult Dim strパスワード() As Byte = Nothing '******************* ' コード記述部 '******************* tmpPrm = New SqlParameter("@ユーザーID", SqlDbType.NVarChar) tmpPrm.Value = bi.ログインID tmpPrm.Direction = ParameterDirection.Input params.Add(tmpPrm) If bi.通常更新フラグ = "1" Then tmpPrm = New SqlParameter("@oldパスワード", SqlDbType.NVarChar) tmpPrm.Value = bi.OLDパスワード tmpPrm.Direction = ParameterDirection.Input params.Add(tmpPrm) index += 1 End If tmpPrm = New SqlParameter("@newパスワード1", SqlDbType.NVarChar) tmpPrm.Value = bi.NEWパスワード1 tmpPrm.Direction = ParameterDirection.Input params.Add(tmpPrm) tmpPrm = New SqlParameter("@newパスワード2", SqlDbType.NVarChar) tmpPrm.Value = bi.NEWパスワード2 tmpPrm.Direction = ParameterDirection.Input params.Add(tmpPrm) '暗号化のパスワード If Not String.IsNullOrEmpty(bi.NEWパスワード1) Then strパスワード = SecurityManager.CreateHash(bi.ログインID, bi.NEWパスワード1, bi.ストレッチ回数) End If tmpPrm = New SqlParameter("@パスワード", SqlDbType.VarBinary) tmpPrm.Value = strパスワード tmpPrm.Direction = ParameterDirection.Input params.Add(tmpPrm) tmpPrm = New SqlParameter("@Address", SqlDbType.VarChar) tmpPrm.Value = bi.ClientIP tmpPrm.Direction = ParameterDirection.Input params.Add(tmpPrm) tmpPrm = New SqlParameter("@最大桁数", SqlDbType.Int) tmpPrm.Direction = ParameterDirection.Output params.Add(tmpPrm) tmpPrm = New SqlParameter("@最小桁数", SqlDbType.Int) tmpPrm.Direction = ParameterDirection.Output params.Add(tmpPrm) tmpPrm = New SqlParameter("@文字種の数", SqlDbType.Int) tmpPrm.Direction = ParameterDirection.Output params.Add(tmpPrm) tmpPrm = New SqlParameter("@パスワード変更不可期間", SqlDbType.Int) tmpPrm.Direction = ParameterDirection.Output params.Add(tmpPrm) tmpPrm = New SqlParameter("@strErrorCode", SqlDbType.NVarChar) tmpPrm.Direction = ParameterDirection.Output tmpPrm.Size = 100 params.Add(tmpPrm) '=============================================== '= SP実行処理 '=============================================== Logger.ApplicationStartBatchJob(bi.ログインID, CMConstInfo.PageID.パスワード変更画面, bi.ClientIP, Me.SqlConn) rls = ExecStoredProcedure(CMConstInfo.DBNAME_CM, STP_ログイン更新, bi.dt, params, bi.TimeOut値)上面的vb.net改成java怎么写
09-12
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值