执行ORACLE中的存储过程出错:ORA-01036 非法的变量名/编号,急!!在线等
我在VS中写的存储过程如下:
CREATE OR REPLACE PROCEDURE P_TEST_DEPT
(
iDeptNO IN number,
strDname IN varchar2
)
AS
BEGIN
insert into TEST_DEPT (DEPTNO,DNAME) values (iDeptNO,strDname);
END P_TEST_DEPT;
在下面的程序中执行:
string source = "user id=spm;data source=spmdb;password=spm";
string select = "select * from TEST_DEPT";
try
{
OracleConnection conn = new OracleConnection(source);
conn.Open();
OracleDataAdapter da = new OracleDataAdapter(select,conn);
DataSet ds = new DataSet();
da.Fill(ds,"DEPT");
dataGrid1.SetDataBinding(ds,"DEPT");
OracleCommand cmd = new OracleCommand("P_TEST_DEPT",conn); //P_TEST_DEPT为存储过程名
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new OracleParameter("iDeptNO ",OracleType.Number,2,"DEPTNO"));
cmd.Parameters.Add(new OracleParameter("strDname",OracleType.VarChar,14,"DNAME"));
cmd.Parameters[0].Value = textBox3.Text; //这儿可能也有错,该参数为整型??
cmd.Parameters[1].Value = textBox4.Text;
cmd.ExecuteNonQuery(); //在此出错:ORA-01036 非法的变量名/编号
ds.Clear();
da.Fill(ds,"DEPT");
dataGrid1.SetDataBinding(ds,"DEPT");
conn.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
问题点数:20、回复次数:11Top
1 楼cg2003(美丽)回复于 2004-11-04 10:55:11 得分 0
该存储过程在VS中先运行了Top
2 楼cg2003(美丽)回复于 2004-11-04 11:12:21 得分 0
请哪位高手看看,先谢!!Top
3 楼cg2003(美丽)回复于 2004-11-04 11:32:18 得分 0
高手在哪儿???Top
4 楼jinbingg(bing)回复于 2004-11-04 12:12:49 得分 5
参数可能有问题Top
5 楼jinbingg(bing)回复于 2004-11-04 12:14:41 得分 0
Covert.toint(textBox3.Text.toString().trim())
Top
6 楼jinbingg(bing)回复于 2004-11-04 12:19:01 得分 0
sorry 我看错了上面的我说的不对
首先你的查询在oralce 数据库里面定义游标才可以的查询的
(1)创建一个包,含有一个游标类型:(一个数据库中只需作一次)
CREATE OR REPLACE PACKAGE Test
AS
TYPE Test_CURSOR IS REF CURSOR;
END Test;
(2)过程:
CREATE OR REPLACE PROCEDURE GetCategoryBooks
(
p_CURSOR out Test.Test_CURSOR, -- 这里是上面包中的类型,输出参数
p_CatogoryID INTEGER
)
AS
BEGIN
OPEN p_CURSOR FOR
SELECT * FROM Books
WHERE CategoryID=p_CatogoryID;
END GetCategoryBooks;
(3).NET 程序中:
OracleParameters parameters = {
new OracleParameter("p_CURSOR", OracleType.CURSOR, 2000, ParameterDirection.Output, true, 0, 0, "",
DataRowVersion.Default, Convert.DBNull),
new OracleParameter("p_CatogoryID", OracleType.Int32)
};
parameters[1].Value = 22;
OracleConnection connection = new OracleConnection( ConnectionString );
OracleCommand command = new OracleCommand("GetCategoryBooks", connection);
command.CommandType = CommandType.StoredProcedure;
foreach(OracleParameter parameter in parameters)
command.Parameters.Add( parameter );
connection.Open();
OracleDataReader dr = command.ExecuteReader();
while(dr.Read())
{
// 你的具体操作。这个就不需要我教吧?
}
connection.Close();Top
7 楼cg2003(美丽)回复于 2004-11-04 12:22:31 得分 0
还是一样的问题Top
8 楼cg2003(美丽)回复于 2004-11-04 12:29:54 得分 0
谢,等会在试一下你上面的方法Top
9 楼cg2003(美丽)回复于 2004-11-04 14:16:16 得分 0
UPTop
10 楼Jeff20040819(美丽)回复于 2004-11-04 14:45:39 得分 15
不用定义游标,你太粗心了,在参数iDeptNO后面多了一个空格,去掉空格就行
cmd.Parameters.Add(new OracleParameter("iDeptNO ",OracleType.Number,2,"DEPTNO"));Top
11 楼AllenKOO(阿伦)回复于 2005-02-24 14:13:49 得分 0
应该不是空格的问题啊。我的跟这个好像。。也是不对。。同样的出错信息。Top




