C#调用Oracle带参数的存储过程的问题!!
private void SpExeFor(string path,string path1,string path2)
{
string splitpath;
int return_num;
splitpath = Path.GetFileNameWithoutExtension(path);
Split(splitpath);
byte[] photo1 = GetPhoto(path);
//存储过程的参数声明
OracleParameter[] parameters ={
new OracleParameter("HPZL",OracleType.VarChar,2),//号牌种类,可以为空
new OracleParameter("HPHM",OracleType.VarChar,16),//号牌号码,可以为空
new OracleParameter("WFSJ",OracleType.DateTime),//违法时间,不可以为空
new OracleParameter("WFXW",OracleType.VarChar,5),//违法行为,不可以为空,引用NLV_VIOACTION_LOCAL.WFXW
new OracleParameter("WFDD",OracleType.VarChar,12),//违法地点代码,不可以为空
new OracleParameter("WFDZ",OracleType.VarChar,200),//违法地址,可以为空
new OracleParameter("CJJG",OracleType.VarChar,10), //采集机关,不可以为空,引用NLV_UNIT_LOCAL.DM
new OracleParameter("SJLY",OracleType.VarChar,2),//数据来源
new OracleParameter("ZPLX",OracleType.Char,1),//抓拍类型 0 -无,1 -图片,2 -录像
new OracleParameter("SBBH",OracleType.VarChar,16),//设备编号 不可以为空
new OracleParameter("DLGLS",OracleType.Number,4),//道路公里数,不可以为空
new OracleParameter("DLMS",OracleType.Number,3),//道路米数,不可以为空
new OracleParameter("FJBJ",OracleType.VarChar,50),//附近标记,可以为空
new OracleParameter("CLSD",OracleType.Number,3),//车辆速度,可以为空
new OracleParameter("DCXS",OracleType.Number,3),//大车限速
new OracleParameter("XCXS",OracleType.Number,3),//小车限速
new OracleParameter("DCZFXS",OracleType.Number,3),//大车执法限速,可以为空
new OracleParameter("XCZFXS",OracleType.Number,3),//小车执法限速,可以为空
new OracleParameter("ZDXS",OracleType.Number,3),//最低限速,可以为空
new OracleParameter("ZJWJ1",OracleType.Blob),//证据图片一,不可以为空
new OracleParameter("ZJWJ2",OracleType.Blob),//证据图片二,可以为空
new OracleParameter("ZJWJ3",OracleType.Blob),//证据图片三,可以为空
new OracleParameter("ZXJG",OracleType.Int16),//执行结果
};
parameters[0].Value = HPZL;//号牌种类
parameters[1].Value = HPHM;//号牌号码
parameters[2].Value = date;//违法时间
parameters[3].Value = comboBox1.Text.Trim();//违法行为
parameters[4].Value = textBox2.Text.Trim();//违法地点
parameters[5].Value = "";//违法地址
parameters[6].Value = textBox3.Text.Trim();//采集机关
parameters[7].Value = "5";//数据来源
parameters[8].Value = "1";//抓拍类型
parameters[9].Value = textBox4.Text.Trim();//设备编号
parameters[10].Value = textBox5.Text.Trim();//道路公里数
parameters[11].Value = textBox6.Text.Trim();//道路米数
parameters[12].Value = "";//附近标记
parameters[13].Value = WFCS;//车辆速度
parameters[14].Value = 0;//大车限速
parameters[15].Value = 0;//小车限速
parameters[16].Value = 0;//大车执法限速
parameters[17].Value = 0;//小车执法限速
parameters[18].Value = WFXS;//最低限速
parameters[19].Value = photo1;//证据图片1,不可以为空。
parameters[20].Value = null;//证据图片2,可以为空。
parameters[21].Value = null;//证据图片3,可以为空。
parameters[0].Direction = ParameterDirection.Input;
parameters[1].Direction = ParameterDirection.Input;
parameters[2].Direction = ParameterDirection.Input;
parameters[3].Direction = ParameterDirection.Input;
parameters[4].Direction = ParameterDirection.Input;
parameters[5].Direction = ParameterDirection.Input;
parameters[6].Direction = ParameterDirection.Input;
parameters[7].Direction = ParameterDirection.Input;
parameters[8].Direction = ParameterDirection.Input;
parameters[9].Direction = ParameterDirection.Input;
parameters[10].Direction = ParameterDirection.Input;
parameters[11].Direction = ParameterDirection.Input;
parameters[12].Direction = ParameterDirection.Input;
parameters[13].Direction = ParameterDirection.Input;
parameters[14].Direction = ParameterDirection.Input;
parameters[15].Direction = ParameterDirection.Input;
parameters[16].Direction = ParameterDirection.Input;
parameters[17].Direction = ParameterDirection.Input;
parameters[18].Direction = ParameterDirection.Input;
parameters[19].Direction = ParameterDirection.Input;
parameters[20].Direction = ParameterDirection.Input;
parameters[21].Direction = ParameterDirection.Input;
parameters[22].Direction = ParameterDirection.Output;
try
{
RunProcedure("pro_mep", parameters);
return_num = Convert.ToInt16(parameters[22].Value.ToString());
listBox1.Items.Add(parameters[22].Value.ToString());
}
catch (Exception e)
{
listBox1.Items.Add(e.ToString());
}
}
private void RunProcedure(string storedProcName, OracleParameter[] parameters)
{
listBox1.Items.Add("正在连接远程数据库,请稍等!");
OracleConnection conn = DB.getConn();
ConectStatus = true;
listBox1.Items.Add("数据库已经成功连接!");
OracleCommand cmd = new OracleCommand();
cmd.Connection = DB.getConn();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = storedProcName;//声明存储过程名
cmd.CommandType = CommandType.StoredProcedure;//执行操作类型为存储过程
conn.Close();
conn.Open();
foreach (OracleParameter parameter in parameters)
{
cmd.Parameters.Add(parameter);
}
cmd.ExecuteNonQuery();//执行存储过程
}
为什么执行的时候提示,无效操作,数据库关闭呢?
哪位大哥知道,请告知!很急!谢谢!
送全部分。