找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 5195|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

通過WEBSERVICE連接ORACLE

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:70976 發(fā)表于 2014-12-25 23:15 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
經(jīng)過一周的IIS折騰,一周的ORACLE折騰。在經(jīng)過今天下午的一點(diǎn)小曲折,終于在VS2005下對(duì)MFC引用WEBSERVICE連接ORACLE數(shù)據(jù)庫取得了初步的成功,F(xiàn)總結(jié)一下:

這個(gè)過程分三步走:
一創(chuàng)建WEBSERVICE(C#)
二 C#連接ORACLE (PS:我開發(fā)WEBSERVICE用的是C#);
三 VS下MFC程序調(diào)用WEBSERVICE。
現(xiàn)將其中碰到的問題及解決過程記錄如下:
一 IIS的配置及WEBSERVICE的初實(shí)例:
剛開始就需要用到IIS及WEBSERVICE,折騰了我一周,深表惡心。關(guān)于IIS及WEBSERVICE的問題,在上兩篇博
客中已做過介紹;
二 ORACLE數(shù)據(jù)庫的初步認(rèn)識(shí):
ORACLE也折騰我將近一周,也很惡心,遠(yuǎn)遠(yuǎn)沒有SQL SERVER用起來順手。我目前的認(rèn)識(shí)有限,網(wǎng)上說它是多
進(jìn)程多線程的,而SQLSERVER是單進(jìn)程,多線程的。ORACLE默認(rèn)的有許多用戶,(例如SCOTT,SYS。)在這些
 用戶中有它們各自的表,索引之類的。
三 C#連接ORACLE:
 關(guān)于連接代碼,網(wǎng)上多的是,在此我也寫在這吧。
  頭部添加下面兩句話
  using System.Data;
using System.Data.OracleClient;
  添加一個(gè)按鈕,添加代碼如下:
  string ConnectionString = "Data Source=orcl;user=scott;password=wu001";//寫連接串
OracleConnection conn = new OracleConnection(ConnectionString);//創(chuàng)建一個(gè)新連接
try
{
conn.Open();
OracleCommand cmd = conn.CreateCommand();
cmd.CommandText = "insert into test values(4,'f')";//在這兒寫sql語句
cmd.ExecuteNonQuery();
}
catch (Exception ee)
{
MessageBox.Show(ee.Message); //如果有錯(cuò)誤,輸出錯(cuò)誤信息
}
finally
{
conn.Close(); //關(guān)閉連接
}
我需要說明三點(diǎn):
 1 添加using System.Data.OracleClient;這句話,如果你直接寫的可能是沒有的。按如下方法添加即可,在  項(xiàng)目名稱上點(diǎn)右鍵,添加引用,在.NET選項(xiàng)卡找到System.Data.OracleClient,確定即可,然后再在頭部添
  加using System.Data.OracleClient;
2 最好寫上MessageBox.Show(ee.Message);這句話,因?yàn)槿绻B接不成功出現(xiàn)異常,這句話即可提示你錯(cuò)誤在  那里,百度就O了。在我做的過程中,幫了我大忙。
  然后把代碼寫在WEBSERVICE的頁面即可,上面的代碼是我在C#的WINDOWS應(yīng)用程序中調(diào)試的,我確保無誤后  直接簡(jiǎn)化如下,寫在WERSERVICE的頁面里。
  [WebMethod]
public void LinkOracle()
{
    string ConnectionString = "Data Source=orcl;user=scott;password=wu001";//寫連接串
OracleConnection conn = new OracleConnection(ConnectionString);//創(chuàng)建一個(gè)新連接
conn.Open();
OracleCommand cmd = conn.CreateCommand();
cmd.CommandText = "insert into test values(4,'f')";//在這兒寫sql語句
cmd.ExecuteNonQuery();
 。
 不要以為我這段代碼不夠健壯,可是如果沒錯(cuò)的話就不用考慮健壯性的問題。然后添加開始生成網(wǎng)站,發(fā)布網(wǎng)站即可。我用VS自帶的HTTP方法調(diào)用方法是沒錯(cuò)的。可是用MFC添加引用時(shí)就不行了。糾結(jié)了10分鐘,回來再在IIS的添加虛擬目錄后,在此瀏覽就錯(cuò)了。后面的介紹具體的解決辦法,耐心耐心,哈哈。
 3 string ConnectionString = "Data Source=orcl;user=scott;password=wu001";的具體解釋:
   DataSource 即為默認(rèn)的全局?jǐn)?shù)據(jù)名。建議大家在裝ORACL的時(shí)候就創(chuàng)建數(shù)據(jù)庫。在安裝目錄下的的NETWORK里的ADMIN里的tnsnames.ora文件中,用記事本打開。我的內(nèi)容如下:DataSource即為這里的ORCL,寫上去即可。
# tnsnames.ora Network Configuration File: D:\oracle\product\10.1.0\db_1\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = abae3bcbcc0c47e)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
)
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = RO)
)
)
4 在虛擬目錄中,瀏覽servece.asmx時(shí),報(bào)錯(cuò),需要oracle客戶端8.7.1上以上的版本.不要驚慌,按如下方法解決即可.
System.Data.OracleClient 需要 Oracle 客戶端軟件 8.1.7 或更高版本。

說明: 執(zhí)行當(dāng)前 Web 請(qǐng)求期間,出現(xiàn)未處理的異常。請(qǐng)檢查堆棧跟蹤信息,以了解有關(guān)該錯(cuò)誤以及代碼中導(dǎo)致錯(cuò)誤的出處的詳細(xì)信息。 異常詳細(xì)信息: System.Exception: System.Data.OracleClient 需要 Oracle 客戶端軟件 8.1.7 或更高版本。
文件夾沒有顯示'安全’,按照如下操作即可調(diào)出。
第一種方法:打開我的電腦——工具——文件夾選項(xiàng)——查看——使用簡(jiǎn)單文件夾共享前的對(duì)勾取掉一切就ok!
第二種方法:WIN+R打開運(yùn)行——輸入secpol.msc-----本地策略——安全選項(xiàng)——網(wǎng)絡(luò)訪問——本地用戶共享安全模式——改為經(jīng)典就ok!
要解決以上問題,只要給Authenticated Users 組加上訪問Oracle Home目錄的權(quán)限即可
1、以Administrator權(quán)限登錄Windows
2、啟動(dòng)Window 資源瀏覽器找到ORACLE_HOME目錄,如C:\Oracle\ora92
3、右鍵彈出菜單,選擇該目錄共享與安全(Win2000下要點(diǎn)擊屬性)
4、點(diǎn)擊 “安全” 頁簽
5、在組和用戶名稱列表中點(diǎn)擊“Authenticated Users” 項(xiàng).
6、在該用戶的權(quán)限列表中,將“讀取和運(yùn)行”的選擇框置為不選中狀態(tài)
7、再次點(diǎn)擊“讀取和運(yùn)行”的選擇框,將其設(shè)置為選中狀態(tài)
8、點(diǎn)擊“高級(jí)”按鈕并在權(quán)限項(xiàng)目中確定“Authenticated Users” 是否擁有“讀取并運(yùn)行”權(quán)限并應(yīng)用于“該文件夾,及子文件夾和文件”. 如果不是,雙擊這樣,并確保權(quán)限可以“應(yīng)用于” “該文件夾,及子文件夾和文件”. 該項(xiàng)非常重要你一定要核查.
9、點(diǎn)擊“確定” 按鈕
10、重啟動(dòng), 以使得所有的修改生效.

=============================================================================
注意,權(quán)限設(shè)置好后,不用機(jī)器重啟的,直接IIS重啟下就行了,方法,開始-運(yùn)行-CMD-IISRESET


。


四 MFC應(yīng)用程序引用WEBSERVICE:
  我用的VS2005,沒出現(xiàn)網(wǎng)上說的添加WEB引用是灰色的問題。在項(xiàng)目名稱上點(diǎn)擊右鍵,添加WEB引用即可。
  因是我是在本機(jī)上,所以點(diǎn)擊查看本地的引用即可。輸入引用名,確定。而后,會(huì)有生成的對(duì)應(yīng)的.h文件,
  拖入頭文件中.我們?cè)谛┰倥粋(gè)按鈕,在其對(duì)應(yīng)的函數(shù)中添加如下代碼:
  CoInitialize(NULL);
HRESULT hr = S_OK;
CService *ws = new CService;
hr = ws->LinkOracle();
if (S_OK==hr)
{
AfxMessageBox("insert ok");
}
else
{
AfxMessageBox("insert error");
}
CoUninitialize();
當(dāng)然.cpp頭中應(yīng)該包含WEBSEVICE對(duì)應(yīng)的頭文件,如下:
#include "WebService.h"
using namespace Service;
到此,一個(gè)用VS下用webservice連接oracle即O了.嚴(yán)謹(jǐn)起見,哈哈,補(bǔ)充一下:
我已解鎖scott用戶,在其下建表test,建表命令如下:create table test(id number(4),name varchar2(5)).
在用oracle創(chuàng)建數(shù)據(jù)庫時(shí)提示有口令管理,那時(shí)解鎖用戶即可,可設(shè)置密碼(我的密碼是wu001).我用的是10g,oracle惡心的是密碼必須包含字母.
這樣就O拉.
打開 sql/plus,用SCOTT進(jìn)入,輸入select *from test;()


主機(jī)字符串這行不用管,我也不知道是干啥的.那位清楚,可給我留言說聲,歡迎交流哪.
即可看到插入成功拉.
貼個(gè)圖:


以上是我的一些體會(huì),希望對(duì)想學(xué)習(xí)的人有所幫助,大家相互交流,一起進(jìn)步哈。

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表