不知是不是受到微软影响,.net程序员似乎与生俱来与MS SQLSERVER密不可分,我所认识的.net开发者都用微软的MS。我也忘记了当时为何不加任何考虑的就投入了SQL SERVER的怀抱,陪伴着他从7.0直到现在的2008。当然这是微软所希望的,任何一个企业都希望顾客选择自己“一条龙”服务。但作为开发者我却不希望一直这样下去,特别是我们在实际工作中会接触到许多不同的系统,如果要对他们进行整合对接,擅长一家之言就稍显力不从心了。最近我就遇到了.net访问oracle的问题,虽然这个问题百度之后一堆解决方案,但真要吃透却是要真正消耗几个脑细胞的。闲话不说,下面简单讲述下事情经过。

公司最近发展很快,新上了很多项目,加之原先有我们自己的一套信息系统,因此,信息孤岛现象特别严重。因此,有必要对这些小孤岛慢慢进行整合统一,以达到资源共享,方便管理。作为客户,开发不是我们的强项。尤其以前比较封闭,很少接触ORACLE数据库,只是听说ORACLE和SQL SERVER从表结构到事物处理,甚至连SQL语法结构也有很大差别。但为了实现信息共享、消除信息孤岛这个“宏伟蓝图”,也只得克服困难,迎难而上了。

用ADO.NET访问ORACLE数据库有很多方式。微软提供了System.Data.OracleClient.dll组建,ORACLE提供了Oracle.DataAccess.Client组件。这两个DLL里面都提供了若干访问ORACLE数据库属性和方法。我的需求不是很复杂,只要能实现用ADO.NET从ORACLE里面读取表数据并简单显示出来就OK了。于是我做了个小测试,主要代码如下:

 1 OracleConnection oracleConn = new OracleConnection();
 2 oracleConn.ConnectionString = "Data Source=127.0.0.1;Persist Security Info=True;User ID=apts;Password=apts;Unicode=True";
 3  
 4 string queryString = "SELECT * FROM aptsjn.tablename";
 5 using(OracleConnection connection = new OracleConnection(oracleConn.ConnectionString))
 6 {
 7     OracleCommand command = new OracleCommand(queryString, connection);
 8     connection.Open();
 9     OracleDataReader reader = command.ExecuteReader();
10     try
11     {
12         if (reader.Read())
13         {
14             Response.Write(reader[0].ToString());
15         }
16     }
17     finally
18     {
19         reader.Close();connection.Open();  

20    }
21}

 

代码写好了,这样就可以了吗?一测试,提示"
ORA-12514: TNS: 监听进程不能解析在连接描述符中给出的 SERVICE_NAME".郁闷了。.net里面访问数据库有web.config配置文件,那么访问ORACLE也应该有吧,百度一下,果然需要这个东东:tnsnames.ora。里面是这样的:
 1 # TNSNAMES.ORA Network Configuration File: C:\oracle\ora90\network\admin\tnsnames.ora
 2 # Generated by Oracle configuration tools.
 3 
 4 #sample
 5 
 6 #DATABASENAME =
 7 #  (DESCRIPTION =
 8 #    (ADDRESS_LIST =
 9 #      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.2)(PORT = 1521))
10 #    )
11 #    (CONNECT_DATA =
12 #      (SERVICE_NAME = servicename)
13 #    )
14 #  )
15 
16 #这里是我定义的
17 APTSLCNEW =
18   (DESCRIPTION =
19     (ADDRESS_LIST =
20       (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.2)(PORT = 1521))
21     )
22     (CONNECT_DATA =
23       (SERVICE_NAME = apts)
24     )
25   )
26 
27 …… ……

 

好了,保存好之后,把上面的 Data Source=127.0.0.1改为Data Source=APTSLCNEW(名字随便起,前后对应就可以了),就这么简单。我试过了,在字符串里面写IP地址会引发错误,不知为何,日后慢慢研究吧。高手莫笑:)。

需要说明的是,ADO.NET访问ORACLE需要安装ORACLE客户端的,否则提示版本错误。客户端我安装的是ORACLE9i,服务器是ORACLE10g,tnsnames.ora文件在C:\Oracle\ora90\network\ADMIN里面。

 

posted @ 2011-02-23 15:37 bwin 阅读(1277) 评论(0) 编辑

 

C

 

 

货币

 

 

¥2.50

 

 

D

 

 

十进制数

 

 

00025

 

 

E

 

 

科学型

 

 

2.500000E+005

 

 

F

 

 

固定点

 

 

25.00

 

 

G

 

 

常规

 

 

2.5

 

 

N

 

 

数字

 

 

2,500,000.00

 

 

X

 


十六进制

 

 

FF

 

formatCode 是可选的格式化代码字符串。(详细内容请搜索“格式化字符串”查看)

必须用“{”和“}”将格式与其他字符分开。如果恰好在格式中也要使用大括号,可以用连续的两个大括号表示一个大括号,即: “{{”或者“}}”。

常用格式举例:

(1) int i=12345;

this.textBox1.Text=i.ToString();

//结果 12345(this指当前对象,或叫当前类的实例)

this.textBox2.Text=i.ToString("d8");

//结果 00012345

(2) int i=123;

double j=123.45;

string s1=string.Format("the value is {0,7:d}",i);

string s2=string.Format("the value is {0,7:f3}",j);

this.textBox1.Text=s1 ;

//结果 the value is 123

this.textBox2.Text=s2;

//结果 the value is 123.450

(3)double i=12345.6789;

this.textBox1.Text=i.ToString("f2"); //结果 12345.68

this.textBox2.Text=i.ToString("f6");

//结果 12345.678900

(4)double i=12345.6789;

this.textBox1.Text=i.ToString("n"); //结果 12,345.68

this.textBox2.Text=i.ToString(“n4”); //结果 12,345.6789

(5)double i=0.126;

string s=string.Format("the value is {0:p}",i);

this.textBox1.Text=i.ToString("p"); //结果 12.6%

this.textBox2.Text=s; //结果 the value is 12.6%

(6) DateTime dt =new DateTime(2003,5,25);

this.textBox1.Text=dt.ToString("yy.M.d");

//结果 03.5.25

this.textBox2.Text=dt.ToString(“yyyy年M月”);

//结果 2003年5月

Convert.ToDateTime("2005/12/22 22:22:22").ToString("yyyy/MM/dd HH:mm:ss")
"2005/12/22 22:22:22"

(7) int i=123;

double j=123.45;

string s=string.Format("i:{0,-7},j:{1,7}",i,j);

//-7表示左对齐,占7位

this.textBox1.Text=s ;

//结果i:123 ,j: 123.45

posted @ 2010-09-17 13:47 bwin 阅读(122) 评论(0) 编辑