博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用C#编写webservice 连接oracle数据库
阅读量:4140 次
发布时间:2019-05-25

本文共 4247 字,大约阅读时间需要 14 分钟。

通过WEBSERVICE连接ORACLE
2011-06-14 14:07

经过一周的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;()

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

即可看到插入成功拉.

贴个图:

转载地址:http://bohvi.baihongyu.com/

你可能感兴趣的文章
log调试利器------__TIME__, __FILE__, __FUNCTION__, __LINE__, __VA_ARGS__搞起
查看>>
makefile写错(多了.a)导致了cannot find -libtest.a------耗费10分钟才找出原因
查看>>
对序列化后的buffer进行strlen操作, oh my god
查看>>
该写地址的地方, 却写了变量本身, 产生core, 导致系统异常
查看>>
make又一编译错误: cannot find -lxxx
查看>>
不要过分相信基础函数, 因为那也是人写的------警惕负负得正的现有逻辑之坑
查看>>
测试环境server的全量流水------节省了90%的时间
查看>>
你应该在makefile中加上ldd -r和md5sum命令
查看>>
系统中负负得正的兼容逻辑也许暂时能跑起来, 但迟早会坑人!
查看>>
搭建环境时遇到core dump问题
查看>>
昨天听某哥说, 某变量没有初始化, 结果有概率性大坑, 浪费不少时间定位处理!
查看>>
《linux C从入门到精通》 xx科技
查看>>
《ACM程序设计》 曾棕根
查看>>
如何用程序判定三点是否共线?
查看>>
有趣的问题:C的表达式x == x,何时为假?!
查看>>
去看刘晓庆演的话剧《武则天》
查看>>
如何用程序判定点是否在线段上?
查看>>
awk、sort等命令搞定几十行代码C++做的事------用好工具, 事半功倍
查看>>
sort | uniq -c | sort -rnk 1 在数据统计中的重要用途------按频率排序
查看>>
用配置文件字段区分外网机器和测试机器!
查看>>