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是正常,切换后就不正常,未知原因?

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

和我的问题一样,求大神解答

加上:

                    cmd.BindByName = true;

试试