1. 接口定义, 即常说的contract接口
2.接口实现,即实现contract的接口
3. 接口托管,将写好的接口部署到wcf托管程序里,譬如IIS,console,windows service,WinForm
4. 在接口实现里完善数据库访问的代码。此段代码与传统的C/S两层 *** 纵DB无差异。
两种方式:1.IP+SID方式 2.配置链接方式1..IP+SID方式
[csharp] view plaincopyprint?
DbHelperOracle.connectionString = string.Format(@"Data Source=(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = {0})(PORT = 1521))
)
(CONNECT_DATA =
(SID = {1})
(SERVER = DEDICATED)
)
)User Id={2}Password={3}",
txtDBServerIP.Text.Trim(), txtOracleSID.Text.Trim(), txtDBUserName.Text.Trim(), txtDBPassword.Text.Trim())
这种方式不需要在Oracle Net Manager管理中添加链接配置信息。
2. 2.配置链接方式,
在Oracle Net Manager管理中添加链接配置信息,然后链接字符串如下写法:
[csharp] view plaincopyprint?
Data Source=TORCLUser Id=myUsernamePassword=myPassword
另外其他的连接方式,参考如下,从其他网站转来的:
Oracle连接字符串总结
Oracle XE
标准连接
Oracle XE(或者"Oracle Database 10g Express Edition")是一个简单免费发布的版本。
Driver=(Oracle in XEClient)dbq=111.21.31.99:1521/XEUid=myUsernamePwd=myPassword
ODBC
新版本连接方式
以下是语法格式:
Driver={Microsoft ODBC for Oracle}Server=myServerAddressUid=myUsernamePwd=myPassword
老版本连接方式
以下是语法格式:
Driver={Microsoft ODBC Driver for Oracle}ConnectString=OracleServer.worldUid=myUsernamePwd=myPassword
OLE DB, OleDbConnection (.NET)
标准安全连接
此连接方式使用来自微软的Provider。
以下是语法格式:
Provider=msdaoraData Source=MyOracleDBUser Id=myUsernamePassword=myPassword
信任连接
以下是语法格式:
Provider=msdaoraData Source=MyOracleDBPersist Security Info=FalseIntegrated Security=Yes
标准安全连接
此连接方式使用来自Oracle的Provider。
以下是语法格式:
Provider=OraOLEDB.OracleData Source=MyOracleDBUser Id=myUsernamePassword=myPassword
信任连接
以下是语法格式:
Provider=OraOLEDB.OracleData Source=MyOracleDBOSAuthent=1
以下是语法格式:
Provider=OraOLEDB.OracleData Source=(DESCRIPTION=(CID=GTU_APP)(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=myHost)(PORT=myPort)))(CONNECT_DATA=(SID=MyOracleSID)(SERVER=DEDICATED)))User Id=myUsernamePassword=myPassword
Oracle.DataAccess.Client.OracleConnection
标准连接
以下是语法格式:
Data Source=TORCLUser Id=myUsernamePassword=myPassword
带integrated security的连接
以下是语法格式:
Data Source=TORCLIntegrated Security=SSPI
带 ODP.NET 不带 tnsnames.ora的连接
以下是语法格式:
Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=MyHost)(PORT=MyPort)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=MyOracleSID)))User Id=myUsernamePassword=myPassword
OracleConnection, Oracle Data Provider, ODP.NET, System.Data.OracleClient.OracleConnection
标准连接
以下是语法格式:
Data Source=MyOracleDBIntegrated Security=yes
仅在Oracle8i release 3 或更高版本
指明用户密与密码的连接
以下是语法格式:
Data Source=MyOracleDBUser Id=myUsernamePassword=myPasswordIntegrated Security=no
这是另一种连接方式不依赖你的DNS.You create a connection string based on the format used in the tnsnames.ora file without the need to actually have one of these files on the client pc.
以下是语法格式:
SERVER=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=MyHost)(PORT=MyPort))(CONNECT_DATA=(SERVICE_NAME=MyOracleSID)))uid=myUsernamepwd=myPassword
Some reported problems with the one above and Visual Studio. Use the next one if you've encountered problems.
以下是语法格式:
Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=MyHost)(PORT=MyPort))(CONNECT_DATA=(SERVICE_NAME=MyOracleSID)))User Id=myUsernamePassword=myPassword
使用连接池
连接池服务如果找不到一个完全匹配连接字符串的连接,他将会创建一个。如果能找到该连接,将会重新使用。
以下是语法格式:
Data Source=myOracleDBUser Id=myUsernamePassword=myPasswordMin Pool Size=10Connection Lifetime=120Connection Timeout=60Incr Pool Size=5Decr Pool Size=2
Windows验证
以下是语法格式:
Data Source=myOracleDBUser Id=/
特权连接
使用SYSOPER的特权
以下是语法格式:
Data Source=myOracleDBUser Id=SYSPassword=SYSDBA Privilege=SYSOPER
利用密码终止函数
当第一次打开连接时,当打开链接后,一个密码过期错误被抛出,捕获这个错误并执行OpenWithNewPassword命令行设置新密码。
以下是语法格式:
Data Source=myOracleDBUser Id=myUsernamePassword=myPassword
oConn.OpenWithNewPassword(sTheNewPassword)
代理验证
以下是语法格式:
Data Source=myOracleDBUser Id=myUsernamePassword=myPasswordProxy User Id=pUserIdProxy Password=pPassword
Core Labs OraDirect (.NET)
标准连接
以下是语法格式:
User ID=myUsernamePassword=myPasswordHost=oraPooling=trueMin Pool Size=0Max Pool Size=100Connection Lifetime=0
Data Shape
MS Data Shape
以下是语法格式:
Provider=MSDataShape.1Persist Security Info=FalseData Provider=MSDAORAData Source=oracUser Id=myUsernamePassword=myPassword
既然你用WCF,为什么还让客户端连接数据库呢?重新设计一下!
客户端只知道服务器的存在,数据库对客户端应该是透明的;
客户端只是想服务器发出请求,至于该请求的处理是对于数据库还是内存或者其他,客户端不需要知道,只要得到服务器的处理结果就可以。
另外,无论客户端还是服务器,用一个数据库连接是不应该的,遇上多线程就麻烦了:不做同步处理会产生错误,做同步处理效率又不行……
------------
你数据库连接使用不对,如果只用一个连接,别说事务,就是并发的普通处理都可能异常;应该每个请求都创建连接、打开、关闭、释放。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)