对应再加一个
OracleParameter IdIn1 = orclCMD.Parameters.Add("sid1", OracleType.Int32, 11); //输入参数
IdIn1.Direction = ParameterDirection.Input;
IdIn1.Value = 3; //这样的形式
orclCMD.ExecuteNonQuery(); 是执行存储
OracleParameter IdIn1 = orclCMD.Parameters.Add("sid1", OracleType.Int32, 11); //输入参数
IdIn1.Direction = ParameterDirection.Input;
IdIn1.Value = 3; //这样的形式
orclCMD.ExecuteNonQuery(); 是执行存储
解决方案 »
- datagridview里怎么删除行,不删数据库里的东西
- textbox与richtextbox的文字颜色问题
- 在练习中使用DataRow的属性 看到了DataRelation 这个类 感觉很有用 不知道我想的可以实现不
- 请各位高手帮帮我,关于的.net/C#问题
- 安裝vs 2005 sp1 問題
- 请问怎样控制输入法指示器在屏幕的位置(100分)?
- int GetControllerVersion(int ID,char *Ver)这条C++的代码,翻译成C#该怎么写??
- 在调用实现ITemplate接口处错请高人帮我看看
- 大哥,大姐们,winform窗口中能嵌入excle表格吗,这个功能你们能实现吗,最好给个代码
- OleDb的Bug?
- 引用DLL出错,求高手解决哈
- 怎么在picturebox中加入类似百度地图的标注??
{
OracleConnection OC1 = new OracleConnection("Data Source=orcl;Persist Security Info=True;User Id=nszs; Password=1");
OC1.Open();
OracleCommand orclCMD = new OracleCommand(); //初始化一个命令对象
orclCMD .Connection = OC1;
orclCMD.CommandText = "FN_NS_ZYSKJ"; //存储过程名
orclCMD .CommandType = CommandType.StoredProcedure;//表面是存储过程
//第一个参数
//如果创建存储过程是有变量,所以还要声明变量
OracleParameter IdIn = orclCMD.Parameters.Add("sid", OracleType.Int32, 11); //输入参数
IdIn.Direction = ParameterDirection.Input; //IdIn.Value = Convert.ToInt32(textBox1.Text); //获得 stuid 号。
//测试时,可直接写成
IdIn.Value = 2; //这样的形式 //第二个参数
OracleParameter IdIn1 = orclCMD.Parameters.Add("sid1", OracleType.Int32, 11); //输入参数
IdIn1.Direction = ParameterDirection.Input;
IdIn1.Value = 3; //这样的形式
//如果创建存储过程是还定义了输出变量
OracleParameter NumTitles = orclCMD.Parameters.Add("sname", OracleType.Int32, 110);//输出参数
NumTitles.Direction = ParameterDirection.Output;
//测试执行存储过程影响的行数
orclCMD.ExecuteNonQuery();
// 注意获得参数的方式: testCMD.Parameters["sname"] ;这个是在存储过程中有输出的变量需要这样子,如果没有输出变量,可以不写。
MessageBox.Show(orclCMD.Parameters["sname"].Value.ToString());
}按照楼上的哥们的方法改后。提示错误ORA-06550: 第 1 行, 第 7 列: PLS-00306: 调用 'FN_NS_ZYSKJ' 时参数个数或类型错误ORA-06550: 第 1 行, 第 7 列:
但是我的存储过程是没问题的。
create or replace function FN_NS_ZYSKJ(
ysnd IN int, --年度
cxqj int --月份
)
return types.cursortypes is
Result types.cursortypes; v_sql Varchar2(32767);
v_sql1 Varchar2(32767);
v_sql2 Varchar2(32767);
v_sql3 Varchar2(32767);
v_sql4 Varchar2(32767);
v_sql5 Varchar2(32767);
v_sql6 Varchar2(32767);
v_sql7 Varchar2(32767);Begin insert into B VALUES(ysnd,cxqj);
COMMIT;
--游标生成
Open Result For
select * FROM B ;
return(Result);
Close Result;
end FN_NS_ZYSKJ;
orclCMD.Parameters.Add(IdIn1);
IdIn.Direction = ParameterDirection.Input; //IdIn.Value = Convert.ToInt32(textBox1.Text); //获得 stuid 号。
//测试时,可直接写成
IdIn.Value = 2; //这样的形式 //第二个参数
OracleParameter IdIn1 = orclCMD.Parameters.Add("sid1", OracleType.Int32, 11); //输入参数这里添加了啊
private DataTable Getdt( )
{
string strCon = System.Configuration.ConfigurationManager.ConnectionStrings["SQLConnectionString"].ConnectionString.ToString();
SqlConnection sqlCon = new SqlConnection(strCon);
sqlCon.Open(); string cmdText = "";
cmdText = String.Format("EXEC YearOrMonthDecSMPrintAgents '{0}','{1}'","参数1", "参数2"); SqlCommand cmd = new SqlCommand(cmdText, sqlCon);
SqlDataAdapter da = null;
da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds, "Proc"); //关闭数据库
sqlCon.Close();
sqlCon.Dispose();
//释放资源
da.Dispose(); return ds.Tables["Proc"];
}
比如在C#中写 OracleParameter IdIn = orclCMD.Parameters.Add("sid", OracleType.Int32, 11); //输入参数
那么一个输入参数就应该是sid。貌似你的输入参数是ysnd和cxqj,输出参数就更不对了如果你的代码只是一个示例,那你要确认输出的参数是int类型的数
cmd.CommandType = CommandType.StoredProcedure; OracleParameter para = new OracleParameter();
para.ParameterName = "v_boxnum";
para.OracleType = OracleType.Int32;
para.Direction = ParameterDirection.Input;
para.Value = boxnum;
cmd.Parameters.Add(para); para = new OracleParameter();
para.ParameterName = "v_boxno1";//
para.OracleType = OracleType.VarChar;
para.Size = 32;
para.Direction = ParameterDirection.Input;
para.Value = boxno1;
cmd.Parameters.Add(para); para = new OracleParameter();
para.ParameterName = "v_returnValue";
para.OracleType = OracleType.Int32;
para.Direction = ParameterDirection.Output;
cmd.Parameters.Add(para); cmd.CommandTimeout = 180;
int retValue = cmd.ExecuteNonQuery();