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