C#调用Oracle带参数的存储过程的问题!!

syluoping 2009-04-14 10:25:46
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();//执行存储过程
}



为什么执行的时候提示,无效操作,数据库关闭呢?
哪位大哥知道,请告知!很急!谢谢!

送全部分。
...全文
627 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
jie3614 2009-04-14
  • 打赏
  • 举报
回复
哦 那是你的存储过程出错了 你的存储过程编译成功了 但是执行过吗? 执行应该报错的
syluoping 2009-04-14
  • 打赏
  • 举报
回复
现在不提示无效操作了,但是提示{"ORA-06550: 第 1 行, 第 7 列: \nPLS-00306: 调用 'PRO_MEP' 时参数数量或类型错误\nORA-06550: 第 1 行, 第 7 列: \nPL/SQL: Statement ignored\n"}这个错误,不知道哪里出问题了。
jie3614 2009-04-14
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 cuihaiyang 的回复:]
cmd.Connection = DB.getConn();
改成cmd.Connection = conn;试一下
[/Quote]

恩 或者这样试试


private void RunProcedure(string storedProcName, OracleParameter[] parameters)
{
listBox1.Items.Add("正在连接远程数据库,请稍等!");
OracleConnection conn = DB.getConn();
ConectStatus = true;
listBox1.Items.Add("数据库已经成功连接!");
conn.Close();

OracleCommand cmd = new OracleCommand();
cmd.Connection = DB.getConn();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = storedProcName;//声明存储过程名
cmd.CommandType = CommandType.StoredProcedure;//执行操作类型为存储过程

foreach (OracleParameter parameter in parameters)
{
cmd.Parameters.Add(parameter);
}
cmd.ExecuteNonQuery();//执行存储过程
}
cuisea 2009-04-14
  • 打赏
  • 举报
回复
cmd.Connection = DB.getConn();
改成cmd.Connection = conn;试一下
syluoping 2009-04-14
  • 打赏
  • 举报
回复
cmd.ExecuteNonQuery();//执行存储过程 走到这里了。
jie3614 2009-04-14
  • 打赏
  • 举报
回复
你单步调试程序走到哪里? DB.getConn()方法是否有问题?
syluoping 2009-04-14
  • 打赏
  • 举报
回复
问题已经找到。谢谢!
gciyfzx07 2009-04-14
  • 打赏
  • 举报
回复
存储过程中的参数类型和你传递的参数类型要一致
wuyq11 2009-04-14
  • 打赏
  • 举报
回复
存储过程问题,数据类型不匹配

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧