不知是不是受到微软影响,.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了。于是我做了个小测试,主要代码如下: 20 }
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();
21}
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 …… ……
需要说明的是,ADO.NET访问ORACLE需要安装ORACLE客户端的,否则提示版本错误。客户端我安装的是ORACLE9i,服务器是ORACLE10g,tnsnames.ora文件在C:\Oracle\ora90\network\ADMIN里面。
|
C
|
货币
|
¥2.50
|
|
D
|
十进制数
|
00025
|
|
E
|
科学型
|
2.500000E+005
|
|
F
|
固定点
|
25.00
|
|
G
|
常规
|
2.5
|
|
N
|
数字
|
2,500,000.00
|
|
X
| 十六进制
|
FF
|
必须用“{”和“}”将格式与其他字符分开。如果恰好在格式中也要使用大括号,可以用连续的两个大括号表示一个大括号,即: “{{”或者“}}”。
常用格式举例:
(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