找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4591|回复: 0
打印 上一主题 下一主题
收起左侧

通过WEBSERVICE连接ORACLE

[复制链接]
跳转到指定楼层
楼主
ID:70976 发表于 2014-12-25 23:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
经过一周的IIS折腾,一周的ORACLE折腾。在经过今天下午的一点小曲折,终于在VS2005下对MFC引用WEBSERVICE连接ORACLE数据库取得了初步的成功。现总结一下:

这个过程分三步走:
一创建WEBSERVICE(C#)
二 C#连接ORACLE (PS:我开发WEBSERVICE用的是C#);
三 VS下MFC程序调用WEBSERVICE。
现将其中碰到的问题及解决过程记录如下:
一 IIS的配置及WEBSERVICE的初实例:
刚开始就需要用到IIS及WEBSERVICE,折腾了我一周,深表恶心。关于IIS及WEBSERVICE的问题,在上两篇博
客中已做过介绍;
二 ORACLE数据库的初步认识:
ORACLE也折腾我将近一周,也很恶心,远远没有SQL SERVER用起来顺手。我目前的认识有限,网上说它是多
进程多线程的,而SQLSERVER是单进程,多线程的。ORACLE默认的有许多用户,(例如SCOTT,SYS。)在这些
 用户中有它们各自的表,索引之类的。
三 C#连接ORACLE:
 关于连接代码,网上多的是,在此我也写在这吧。
  头部添加下面两句话
  using System.Data;
using System.Data.OracleClient;
  添加一个按钮,添加代码如下:
  string ConnectionString = "Data Source=orcl;user=scott;password=wu001";//写连接串
OracleConnection conn = new OracleConnection(ConnectionString);//创建一个新连接
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); //如果有错误,输出错误信息
}
finally
{
conn.Close(); //关闭连接
}
我需要说明三点:
 1 添加using System.Data.OracleClient;这句话,如果你直接写的可能是没有的。按如下方法添加即可,在  项目名称上点右键,添加引用,在.NET选项卡找到System.Data.OracleClient,确定即可,然后再在头部添
  加using System.Data.OracleClient;
2 最好写上MessageBox.Show(ee.Message);这句话,因为如果连接不成功出现异常,这句话即可提示你错误在  那里,百度就O了。在我做的过程中,帮了我大忙。
  然后把代码写在WEBSERVICE的页面即可,上面的代码是我在C#的WINDOWS应用程序中调试的,我确保无误后  直接简化如下,写在WERSERVICE的页面里。
  [WebMethod]
public void LinkOracle()
{
    string ConnectionString = "Data Source=orcl;user=scott;password=wu001";//写连接串
OracleConnection conn = new OracleConnection(ConnectionString);//创建一个新连接
conn.Open();
OracleCommand cmd = conn.CreateCommand();
cmd.CommandText = "insert into test values(4,'f')";//在这儿写sql语句
cmd.ExecuteNonQuery();
  }
 不要以为我这段代码不够健壮,可是如果没错的话就不用考虑健壮性的问题。然后添加开始生成网站,发布网站即可。我用VS自带的HTTP方法调用方法是没错的。可是用MFC添加引用时就不行了。纠结了10分钟,回来再在IIS的添加虚拟目录后,在此浏览就错了。后面的介绍具体的解决办法,耐心耐心,哈哈。
 3 string ConnectionString = "Data Source=orcl;user=scott;password=wu001";的具体解释:
   DataSource 即为默认的全局数据名。建议大家在装ORACL的时候就创建数据库。在安装目录下的的NETWORK里的ADMIN里的tnsnames.ora文件中,用记事本打开。我的内容如下: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时,报错,需要oracle客户端8.7.1上以上的版本.不要惊慌,按如下方法解决即可.
System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本。

说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Exception: System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本。
文件夹没有显示'安全’,按照如下操作即可调出。
第一种方法:打开我的电脑——工具——文件夹选项——查看——使用简单文件夹共享前的对勾取掉一切就ok
第二种方法:WIN+R打开运行——输入secpol.msc-----本地策略——安全选项——网络访问——本地用户共享安全模式——改为经典就ok!
要解决以上问题,只要给Authenticated Users 组加上访问Oracle Home目录的权限即可
1、以Administrator权限登录Windows
2、启动Window 资源浏览器找到ORACLE_HOME目录,如C:\Oracle\ora92
3、右键弹出菜单,选择该目录共享与安全(Win2000下要点击属性)
4、点击 “安全” 页签
5、在组和用户名称列表中点击“Authenticated Users” 项.
6、在该用户的权限列表中,将“读取和运行”的选择框置为不选中状态
7、再次点击“读取和运行”的选择框,将其设置为选中状态
8、点击“高级”按钮并在权限项目中确定“Authenticated Users” 是否拥有“读取并运行”权限并应用于“该文件夹,及子文件夹和文件”. 如果不是,双击这样,并确保权限可以“应用于” “该文件夹,及子文件夹和文件”. 该项非常重要你一定要核查.
9、点击“确定” 按钮
10、重启动, 以使得所有的修改生效.

=============================================================================
注意,权限设置好后,不用机器重启的,直接IIS重启下就行了,方法,开始-运行-CMD-IISRESET




四 MFC应用程序引用WEBSERVICE:
  我用的VS2005,没出现网上说的添加WEB引用是灰色的问题。在项目名称上点击右键,添加WEB引用即可。
  因是我是在本机上,所以点击查看本地的引用即可。输入引用名,确定。而后,会有生成的对应的.h文件,
  拖入头文件中.我们在些再弄一个按钮,在其对应的函数中添加如下代码:
  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();
当然.cpp头中应该包含WEBSEVICE对应的头文件,如下:
#include "WebService.h"
using namespace Service;
到此,一个用VS下用webservice连接oracle即O了.严谨起见,哈哈,补充一下:
我已解锁scott用户,在其下建表test,建表命令如下:create table test(id number(4),name varchar2(5)).
在用oracle创建数据库时提示有口令管理,那时解锁用户即可,可设置密码(我的密码是wu001).我用的是10g,oracle恶心的是密码必须包含字母.
这样就O拉.
打开 sql/plus,用SCOTT进入,输入select *from test;()


主机字符串这行不用管,我也不知道是干啥的.那位清楚,可给我留言说声,欢迎交流哪.
即可看到插入成功拉.
贴个图:


以上是我的一些体会,希望对想学习的人有所帮助,大家相互交流,一起进步哈。

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表