tobemanager 2021-07-21 10:48 采纳率: 0%
浏览 455

c# 通过调用Oracle.ManagedDataAccess执行oracle存储过程报错

        string 手术ID = "123123";

        string 病人ID = "483098";

        string 洗手护士1 = "0";

        string 洗手护士2 = "0";

        string 洗手护士3 = "0";

        string 巡回护士1 = "1465";

        string 巡回护士2 = "0";

        string 巡回护士3 = "0";

        string 麻醉师1 = "0";

        string 麻醉师2 = "0";

        string 麻醉师3 = "0";

        string 申请单号 = "182340";

        string 手术间号 = "15";

        string 手术台次 = "3";

        string 手术时间 = "2021-07-08 15:00";

        using (OracleConnection conn = new OracleConnection(strHIScon))
        {
            //try
            //{
            conn.Open();
            using (OracleCommand cmd = new OracleCommand())
            {
                cmd.Connection = conn;

                cmd.CommandType = CommandType.StoredProcedure;

                cmd.CommandText = "wzrmyy.proc_his_sm_paiban";//指定调用的存储过程名称

                #region


                //1
                //cmd.Parameters.Add("g_sqd", OracleDbType.Varchar2,100, 申请单号, ParameterDirection.Input);
                cmd.Parameters.Add("g_sqd", OracleDbType.Varchar2, 100, 申请单号,ParameterDirection.Input);
                //cmd.Parameters.Add("g_sqd", OracleType.VarChar).Direction = ParameterDirection.Input;
                //cmd.Parameters["g_sqd"].Value = 申请单号;

                

                //2
                //cmd.Parameters.Add("g_patid", OracleDbType.Varchar2, 100, 病人ID, ParameterDirection.Input);
                cmd.Parameters.Add("g_patid", OracleDbType.Varchar2, 100, 病人ID, ParameterDirection.Input);
                //cmd.Parameters.Add("g_patid", OracleType.VarChar).Direction = ParameterDirection.Input;
                //cmd.Parameters["g_patid"].Value = 病人ID;

                //3
                //cmd.Parameters.Add("g_ssjh", OracleDbType.Varchar2, 100, 手术间号, ParameterDirection.Input);
                cmd.Parameters.Add("g_ssjh", OracleDbType.Varchar2, 100, 手术间号, ParameterDirection.Input);
                //cmd.Parameters.Add("g_ssjh", OracleType.VarChar).Direction = ParameterDirection.Input;
                //cmd.Parameters["g_ssjh"].Value = 手术间号;

                //4 
                //cmd.Parameters.Add("g_sstc", OracleDbType.Varchar2, 100, 手术台次, ParameterDirection.Input);
                cmd.Parameters.Add("g_sstc", OracleDbType.Varchar2, 100, 手术台次, ParameterDirection.Input);
                //cmd.Parameters.Add("g_sstc", OracleType.VarChar).Direction = ParameterDirection.Input;
                //cmd.Parameters["g_sstc"].Value = 手术台次;

                //5
                //cmd.Parameters.Add("g_sstime", OracleDbType.Varchar2, 100, 手术时间, ParameterDirection.Input);
                cmd.Parameters.Add("g_sstime", OracleDbType.Varchar2, 100, 手术时间, ParameterDirection.Input);
                //cmd.Parameters.Add("g_sstime", OracleType.VarChar).Direction = ParameterDirection.Input;
                //cmd.Parameters["g_sstime"].Value = 手术时间;

                //6
                //cmd.Parameters.Add("g_xshs1", OracleDbType.Varchar2, 100, 洗手护士1, ParameterDirection.Input);
                cmd.Parameters.Add("g_xshs1", OracleDbType.Varchar2, 100, 洗手护士1, ParameterDirection.Input);
                //cmd.Parameters.Add("g_xshs1", OracleType.VarChar).Direction = ParameterDirection.Input;
                //cmd.Parameters["g_xshs1"].Value = 洗手护士1;

                //7
                //cmd.Parameters.Add("g_xshs2", OracleDbType.Varchar2, 100, 洗手护士2, ParameterDirection.Input);
                cmd.Parameters.Add("g_xshs2", OracleDbType.Varchar2, 100, 洗手护士2, ParameterDirection.Input);
                //cmd.Parameters.Add("g_xshs2", OracleType.VarChar).Direction = ParameterDirection.Input;
                //cmd.Parameters["g_xshs2"].Value = 洗手护士2;

                //8
                //cmd.Parameters.Add("g_xshs3", OracleDbType.Varchar2, 100, 洗手护士3, ParameterDirection.Input);
                cmd.Parameters.Add("g_xshs3", OracleDbType.Varchar2, 100, 洗手护士3, ParameterDirection.Input);
                //cmd.Parameters.Add("g_xshs3", OracleType.VarChar).Direction = ParameterDirection.Input;
                //cmd.Parameters["g_xshs3"].Value = 洗手护士3;

                //9
                //cmd.Parameters.Add("g_mzs1", OracleDbType.Varchar2, 100, 麻醉师1, ParameterDirection.Input);
                cmd.Parameters.Add("g_mzs1", OracleDbType.Varchar2, 100, 麻醉师1, ParameterDirection.Input);
                //cmd.Parameters.Add("g_mzs1", OracleType.Number).Direction = ParameterDirection.Input;
                //cmd.Parameters["g_mzs1"].Value = 麻醉师1 == "" ? 0 : int.Parse(麻醉师1);


                //10
                //cmd.Parameters.Add("g_mzs2", OracleDbType.Varchar2, 100, 麻醉师2, ParameterDirection.Input);
                cmd.Parameters.Add("g_mzs2", OracleDbType.Varchar2, 100, 麻醉师2, ParameterDirection.Input);
                //cmd.Parameters.Add("g_mzs2", OracleType.VarChar).Direction = ParameterDirection.Input;
                //cmd.Parameters["g_mzs2"].Value = 麻醉师2;

                //11
                //cmd.Parameters.Add("g_mzs3", OracleDbType.Varchar2, 100, 麻醉师3, ParameterDirection.Input);
                cmd.Parameters.Add("g_mzs3", OracleDbType.Varchar2, 100, 麻醉师3, ParameterDirection.Input);
                //cmd.Parameters.Add("g_mzs3", OracleType.VarChar).Direction = ParameterDirection.Input;
                //cmd.Parameters["g_mzs3"].Value = 麻醉师3;


                //12
                //cmd.Parameters.Add("g_xhhs1", OracleDbType.Varchar2, 100, 巡回护士1, ParameterDirection.Input);
                cmd.Parameters.Add("g_xhhs1", OracleDbType.Varchar2, 100, 巡回护士1, ParameterDirection.Input);
                //cmd.Parameters.Add("g_xhhs1", OracleType.VarChar).Direction = ParameterDirection.Input;
                //cmd.Parameters["g_xhhs1"].Value = 巡回护士1;


                //13
                //cmd.Parameters.Add("g_xhhs2", OracleDbType.Varchar2, 100, 巡回护士2, ParameterDirection.Input);
                cmd.Parameters.Add("g_xhhs2", OracleDbType.Varchar2, 100, 巡回护士2, ParameterDirection.Input);
                //cmd.Parameters.Add("g_xhhs2", OracleType.VarChar).Direction = ParameterDirection.Input;
                //cmd.Parameters["g_xhhs2"].Value = 巡回护士2;


                //14
                //cmd.Parameters.Add("g_xhhs3", OracleDbType.Varchar2, 100, 巡回护士3, ParameterDirection.Input);
                cmd.Parameters.Add("g_xhhs3", OracleDbType.Varchar2, 100, 巡回护士3, ParameterDirection.Input);
                //cmd.Parameters.Add("g_xhhs3", OracleType.VarChar).Direction = ParameterDirection.Input;
                //cmd.Parameters["g_xhhs3"].Value = 巡回护士3;

                //15
                cmd.Parameters.Add("Ret_code", OracleDbType.Varchar2, 100, ParameterDirection.Output);
                //cmd.Parameters.Add("Ret_code", OracleType.VarChar, 100).Direction = ParameterDirection.Output;

                //16
                cmd.Parameters.Add("Ret_msg", OracleDbType.Varchar2, 100, ParameterDirection.Output);
                //cmd.Parameters.Add("Ret_msg", OracleType.VarChar, 100).Direction = ParameterDirection.Output;


                #endregion
               
                int result = cmd.ExecuteNonQuery();

一开始是通过System.Data.OracleClient调用存储过程是一切正常,但是由于受到客户端版本影响,需要改为通过Oracle.ManagedDataAccess来调用存储过程,在参数不变的情况下,更换引用方式就产生错误提示,错误提示如下:
Oracle.ManagedDataAccess.Client.OracleException (0x80004005): ORA-06502: PL/SQL: 数字或值错误 : character string buffer too small
ORA-06512: 在 "WZRMYY.PROC_HIS_SM_PAIBAN", line 383
ORA-06502: PL/SQL: 数字或值错误 : character string buffer too small
ORA-06512: 在 line 1
在 OracleInternal.ServiceObjects.OracleConnectionImpl.VerifyExecution(Int32& cursorId, Boolean bThrowArrayBindRelatedErrors, SqlStatementType sqlStatementType, Int32 arrayBindCount, OracleException& exceptionForArrayBindDML, Boolean& hasMoreRowsInDB, Boolean bFirstIterationDone)
在 OracleInternal.ServiceObjects.OracleCommandImpl.ExecuteNonQuery(String commandText, OracleParameterCollection paramColl, CommandType commandType, OracleConnectionImpl connectionImpl, Int32 longFetchSize, Int64 clientInitialLOBFS, OracleDependencyImpl orclDependencyImpl, Int64[]& scnFromExecution, OracleParameterCollection& bindByPositionParamColl, Boolean& bBindParamPresent, OracleException& exceptionForArrayBindDML, OracleConnection connection, OracleLogicalTransaction& oracleLogicalTransaction, Boolean isFromEF)
在 Oracle.ManagedDataAccess.Client.OracleCommand.ExecuteNonQuery()
在 WindowsFormsApplication1.Form1.button回传_Click(Object sender, EventArgs e) 位置 D:\VS2015\使用Oracle.ManagedDataAccess回传数据到Oracle\Form1.cs:行号 174
在 System.Windows.Forms.Control.OnClick(EventArgs e)
在 System.Windows.Forms.Button.OnClick(EventArgs e)
在 System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
在 System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
在 System.Windows.Forms.Control.WndProc(Message& m)
在 System.Windows.Forms.ButtonBase.WndProc(Message& m)
在 System.Windows.Forms.Button.WndProc(Message& m)
在 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
一直提示:character string buffer too small。但是在使用System.Data.OracleClient是正常,切换后就不正常,未知原因?

  • 写回答

3条回答 默认 最新

  • Null_Reference 2021-07-22 17:46
    关注

    Oracle.ManagedDataAccess 和 oracle 的版本对应吗?

    评论

报告相同问题?

问题事件

  • 创建了问题 7月21日

悬赏问题

  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥15 Oracle触发器记录修改前后的字段值
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题