odp.net可以将参数传递给布尔pl / sql参数吗?
是否可以正确地将OracleParameter传递给pl / sql存储过程中的布尔参数?
您不能在SQL中使用布尔参数。 因此,调用获取或返回布尔值的存储过程在SQL中不起作用。 在pl / sql块中使用这样的过程没有问题。
来自JCallico的回答:
我使用以下解决方法来绕过此限制:
- 使用匿名块包装函数调用。
- 返回包含1或0的输出变量。
- 读取输出变量并将其转换为boolean。
以下是一些示例代码:
using (var connection = new OracleConnection("")) { var command = new OracleCommand(); command.Connection = connection; command.CommandText = "declare v_bool boolean;" + "begin " + "v_bool := auth_com.is_valid_username (:username); "+ "if (v_bool = TRUE) then select 1 into :v_result from dual; end if; " + "if (v_bool = FALSE) then select 0 into :v_result from dual; end if; " + "end;"; command.Parameters.Add(new OracleParameter { ParameterName = "username", OracleDbType = OracleDbType.NVarchar2, Size=512, Direction = ParameterDirection.Input }); command.Parameters.Add(new OracleParameter { ParameterName = "v_result", OracleDbType = OracleDbType.Decimal, Direction = ParameterDirection.Output }); try { connection.Open(); command.ExecuteNonQuery(); } finally { connection.Close(); } bool success = Convert.ToBoolean(((OracleDecimal)command.Parameters["v_result"].Value).ToInt32()); }
编辑:
来自Oracle的Alex Keh ,2013年10月:
我们计划在短期内支持托管提供商的ODP.NET布尔,可能在明年年中。
我使用以下解决方法来绕过此限制:
- 使用匿名块包装函数调用。
- 返回包含1或0的输出变量。
- 读取输出变量并将其转换为boolean。
以下是一些示例代码:
using (var connection = new OracleConnection("")) { var command = new OracleCommand(); command.Connection = connection; command.CommandText = "declare v_bool boolean;" + "begin " + "v_bool := auth_com.is_valid_username (:username); "+ "if (v_bool = TRUE) then select 1 into :v_result from dual; end if; " + "if (v_bool = FALSE) then select 0 into :v_result from dual; end if; " + "end;"; command.Parameters.Add(new OracleParameter { ParameterName = "username", OracleDbType = OracleDbType.NVarchar2, Size=512, Direction = ParameterDirection.Input }); command.Parameters.Add(new OracleParameter { ParameterName = "v_result", OracleDbType = OracleDbType.Decimal, Direction = ParameterDirection.Output }); try { connection.Open(); command.ExecuteNonQuery(); } finally { connection.Close(); } bool success = Convert.ToBoolean(((OracleDecimal)command.Parameters["v_result"].Value).ToInt32()); }
编辑:
来自Oracle的Alex Keh ,2013年10月:
我们计划在短期内支持托管提供商的ODP.NET布尔,可能在明年年中。
- 铸造物体的昂贵程度如何?
- 应该“或”使用.Net4 Hasflags:enum.HasFlag(AccessRights.Read | AccessRights.Write)
- 无法从GridView中的行/单元格中获取值
- RuntimeHelpers.GetHashCode做了什么
- 如何在c#中将日期时间转换为特定时区?
- 如何将user.config保存到AppData \ Roaming文件夹而不是AppData \ Local?
- 是否可以使用plinq ForAll批量插入数据库?
- 我可以创建一个带正斜杠的元素作为名称的一部分
- 记住我在ASP.NET表单身份validation中的function不起作用