c# - 使用C#调用Oracle函数时出现字符串缓冲区太小错误

标签 c# asp.net oracle

从 C# 调用 oracle 函数时出现 plsql 数值错误 - 请告诉我如何消除该错误。

PL/SQL: numeric or value error: character string buffer too small

代码:

create or replace function testdotnet(h1 varchar2)
 return varchar2   
 as
x varchar2(250);
begin
      select 'hello' into x from dual;
      return x;
end;

C# 代码:

string CommandStr = "APPS.testdotnet";

using (OracleConnection conn = new OracleConnection("User Id=apps;Password=***;Data Source=***"))
using (OracleCommand cmd = new OracleCommand(CommandStr, conn))
{
    cmd.CommandType = CommandType.StoredProcedure;

    cmd.Parameters.Add("h1", OracleDbType.Varchar2).Value = "aaa";
    cmd.Parameters.Add("x", OracleDbType.Varchar2, 40000).Direction = ParameterDirection.ReturnValue;
    cmd.Parameters["x"].Size = 255;
    cmd.Parameters["h1"].Size = 255;

    conn.Open();
    cmd.ExecuteNonQuery();

    Response.Write( cmd.Parameters["x"].Value.ToString());
}

最佳答案

VARCHAR2 的最大大小为 32,767 字节,不可能为 40,000。

改变

cmd.Parameters.Add("x", OracleDbType.Varchar2, 40000).Direction = ParameterDirection.ReturnValue;

cmd.Parameters.Add("x", OracleDbType.Varchar2, 32767).Direction = ParameterDirection.ReturnValue;

或者如果您需要更大的数据,请使用CLOB

关于c# - 使用C#调用Oracle函数时出现字符串缓冲区太小错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47920552/

相关文章:

c# - 将 System.Object 转换为 bool 值

c# - 媒体引擎错误,在本地机器上听不到声音

c# - 当我尝试打开扩展名为 .xls 的 Excel 文件时出现对话框

SQL 查询对多个表进行 Count()

c# - 为什么 IEnumerable 不等同于列表

c# - REST API 中对象的设计模式?

asp.net - 在 web.sitemap 中使用 URL 通配符?

asp.net - 不引用 MVC 的 AllowHtml 属性

甲骨文 12c : Insert into Table with Identity Column

oracle - 使用 sqoop 从 Oracle 到 hive 的日期导入问题