WEBSERVICE连接ORACLE

来源:互联网 发布:排版软件免费下载 编辑:程序博客网 时间:2024/06/10 02:22
 

这个过程分三步走:

一创建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;()

通过WEBSERVICE连接ORACLE

主机字符串这行不用管,我也不知道是干啥的.那位清楚,可给我留言说声,欢迎交流哪.

即可看到插入成功拉.

贴个图:

通过WEBSERVICE连接ORACLE



原创粉丝点击