首先我先描述一下我的問題:
我是用的vs2008開發的C#程序,win7 64位系統,我的系統中裝有64 位oracle 11g的數據庫和32爲的client端。
如果不知道爲什麼這麼裝,先看本段落,如果知道,直接看下一段。pl/sql因爲是爲32位oracle程序開發的,故不支持64位數據庫,下載client安裝,或者直接裝instant client也可以,在pl/sql 工具->首選項->連接中的oracle主目錄和oracle OCI庫改爲client端的目錄和OCI所在的路徑,pl/sql就可以正常工作了。用服務端配置連接名時很愛出錯,我一般用client端的net configuration assist配置連接名,所以裝了client,而不是instant
client。
我的配置文件tnsname.ora使用client配置的,pl/sql連接正常,tnsping也能ping通,sql plus連接也正常。但是在連接數據庫時報告ORA-12154: TNS: 無法解析指定的連接標識符。在網上找了幾篇文章沒有解決,後來想起了OCI的不兼容問題,編寫的64位程序調用32位OCI程序應該會出現問題,於是找到Debug解決方案平臺,把我的程序的目標平臺改爲X86,也就是32位程序,程序通過。
貼出測試代碼:DataSource爲配置的服務命名
OracleConnection conn = new OracleConnection("DataSource=orcl_localhost;User ID=PSIDP;Password=PSIDP");//Data Source後面跟你數據庫的名字,User ID爲用戶名,Password爲密碼
conn.Open();
string sql = "insert into users(name,pwd) values(:name,:pwd)";
OracleCommand cmd = new OracleCommand(sql, conn);
OracleParameter parn = new OracleParameter(":name", name);
cmd.Parameters.Add(parn);
OracleParameter parp = new OracleParameter(":pwd", name);
cmd.Parameters.Add(parp);
//int result = cmd.ExecuteNonQuery();//result接收受影響行數,也就是說result大於0的話表示添加成功
int result = cmd.ExecuteNonQuery();
conn.Close(); cmd.Dispose();