使用Ado.Net 中的OleDbCommand.ExecuteNonQuery()建立过程遇到的问题

Win2003+Vs2003+Oracle9i

可以使用OleDbCommand.ExecuteNonquery()给Oracle建立Procedure,Trigger,Package。
如:
OleDbConnection Con=new OleDbConnection("..");
Con.Open();
OleDbCommand cmd
=Con.CreateCommand();
string sql=string.Concat
(
"create or replace procedure p_test ",
"as ",
"begin ",
" null;",
"end");
cmd.CommandText
=sql;
cmd.ExecuteNonquery();
Con.Close();
可以建立如上所示的过程,但是,同在SqlPlus中建立相同的过程的差别:
在存储过程源代码的User_Source表中,使用 SqlPlus建立的过程,会根据建立时遇到的行数(回车),自动建立相应的行数在user_source表中,而使用OleDbCommand建立的过程,会放在一行中。
多行的,line是自动增加的,name 标示名称,type标示何种类型,test为源代码。
user_source的表结构:
name   varchar2(30),
type    varchar2(12),
line      number,
text     varchar2(4000)

有多行的好处是:显示直观,便于查错
OleDbCommand建立的:非常不直观,查错困难,过程中的注释,不能使用---,只能使用/*---*/,因为所有的Sql会被认为是一行,导致---后面的Sql被注释。如果使用OleDbCommand建立的过程大于4000字符,Oracle会把大于4000字符的本分放在第2行。

暂时的解决办法: 
因为建立过程,肯定不是简单的把源代码插入user_source表中,所以建立过程还要使用OleDbCommand,建立完成后,修改user_source表中对应的行,把一行变为多行。

哪位有更好的建议,请多多指教。

posted on 2006-01-12 10:55  Pierce  阅读(877)  评论(0编辑  收藏  举报

导航