.NET和Oracle
- 格式:doc
- 大小:265.50 KB
- 文档页数:42
LEON D∙博客园∙首页∙新闻∙新随笔∙联系∙管理∙订阅随笔- 2 文章- 4 评论- 5 .net连接oracle数据库//首先添加两条引用using System.Data.OracleClient;using System.Data;private void oracle_dataset(){string ConnectionString = "DataSource=sky;user=system;password=manager;";//写连接串OracleConnection conn = newOracleConnection(ConnectionString);//创建一个新连接try{conn.Open();OracleCommand cmd = conn.CreateCommand();mandText = "select * from MyTable";OracleDataReader odr = cmd.ExecuteReader();while (odr.Read())//读取数据,如果odr.Read()返回为false的话,就说明到记录集的尾部了{Response.Write(odr.GetOracleString(1).ToString());//输出字段"select * from MyT able"; 有多种类型,索引要匹配,感觉不如odr[1].ToString()好用}odr.Close();}catch (Exception ee){Response.Write(ee.Message); //如果有错误,输出错误信息}finally{conn.Close(); //关闭连接}}//OracleDataAdapter的使用1.public void oracle_dataset(){string ConnectionString = "DataSource=mine;user=sys;password=sys;"; //写连接串OracleConnection conn = new OracleConnection(ConnectionString); //创建一个新连接OracleCommand cmd = new OracleCommand("select * fromfjdl.t_rights", conn);DataSet ds = new DataSet();OracleDataAdapter oda = new OracleDataAdapter();oda.SelectCommand = cmd;oda.Fill(ds);conn.Close();DataGrid1.DataSource = ds.Tables[0].DefaultView;DataGrid1.DataBind();}2.public void oracle_dataset(){System.Data.OracleClient.OracleConnection oracle1 = new System.Data.OracleClient.OracleConnection("user id=system;datasource=rick;password=system");string sqlText = "select * from scott.tAdmin";System.Data.DataSet set1 = new DataSet();System.Data.OracleClient.OracleDataAdapter Ada1 = new System.Data.OracleClient.OracleDataAdapter(sqlText, oracle1);Ada1.Fill(set1, "oracle_data1");this.DataGrid3.DataSource =set1.Tables["oracle_data1"].DefaultView;this.DataGrid3.DataBind();}===========================================在.NET中调用Oracle9i存储过程经验总结在.NET中调用Oracle9i存储过程可以用多个数据提供者,比如OralceClient,OleDb。
本文将用OralceClient为例。
.NET语言用C#。
一、调用一个带输入、输出参数的存储过程首先,在Oralce中创建存储过程如下:create or replace procedure GetRecords(name_out out varchar2,age_in in varchar2) asbeginselect NAME into name_out from test where AGE = age_in;end;然后,在C#项目中作如下调用:string connectionString = "Data Source=YXZHANG;UserID=YXZHANG;Password=YXZHANG";string queryString = "getrecords";OracleConnection cn = new OracleConnection(connectionString); OracleCommand cmd = new OracleCommand(queryString,cn);mandType = CommandType.StoredProcedure;cmd.Parameters.Add("name_out",OracleType.VarChar,20);cmd.Parameters["name_out"].Direction = ParameterDirection.Output;cmd.Parameters.Add("age_in",21);try{cn.Open();cmd.ExecuteNonQuery();Console.WriteLine("Nameis:{0}",cmd.Parameters["name_out"].Value.ToString());cn.Close();}catch( OracleException ex ){Console.WriteLine("Exception occurred!");Console.WriteLine("The exception message is:{0}",ex.Message.ToString());}finally{Console.WriteLine("------------------End-------------------");}小结:以上是很平常的调用方法,但是我在做这个示例程序的时候,却不是那么一帆风顺。
这里要指出OracleClient的一个不尽如人意之处,就是对于参数名称,必须和存储过程定义中的参数同名,否则就会报错。
比如将代码中的“name_out”改为别的名称的话,就会报异常。
但我试着用OleDb代替OralceClient,却没有这个问题。
不知道在新版本的数据提供程序中会否改进这一点?二、调用不返回数据的存储过程首先,在Oralce中创建存储过程如下:create or replace procedure insertRecord(UserID in varchar2,UserName in varchar2,UserAge in varchar2) isbegininsert into test values (UserID, UserName, UserAge);end;然后,在C#项目中作如下调用:string connectionString = "Data Source=YXZHANG;UserID=YXZHANG;Password=YXZHANG";string queryString = "insertRecord";OracleConnection cn = new OracleConnection(connectionString); OracleCommand cmd = new OracleCommand(queryString,cn);mandType = CommandType.StoredProcedure;cmd.Parameters.Add("UserID","007");cmd.Parameters.Add("UserName","Dell");cmd.Parameters.Add("UserAge","40");try{cn.Open();cmd.ExecuteNonQuery();Console.WriteLine("Record inserted!");cn.Close();}catch( OracleException ex ){Console.WriteLine("Exception occurred!");Console.WriteLine("The exception message is:{0}",ex.Message.ToString());}finally{Console.WriteLine("------------------End-------------------");}小结:不返回数据的存储过程一般有Delete, Insert, Update等。
虽然它们的SQL语句不同,但是调用方面都是一样的。
只要传入正确的参数,一般不会出什么问题。
不过还是要注意,在使用OralceClient作为数据提供者的时候,参数名称一定要和存储过程定义中的一致!至于参数添加的顺序倒是无所谓的,因为有参数名称作为区别。
三、IDENTITY 和SEQUENCESql Server中,定义一个列为递增列很容易,但我在Oracle中却怎么也找不到设置的方法。