目錄
A.安装mono2.6
B.安装freetds
C.安装OracelInstantClient
0. Linux下访问Oracle和SqlServer的小工具
1. Linux下mono访问SqlServer数据库
 
2.Linux下mono访问Oracle数据库
3.基于Apache的mono对SqlServer的访问
4.基于Apache的mono对Oracle的访问
首頁 資料庫 mysql教程 Linux+mono+Apache访问SQLServer数据库和Oracle数据库

Linux+mono+Apache访问SQLServer数据库和Oracle数据库

Jun 07, 2016 pm 03:18 PM
sqlserver 訪問

这几天研究Linux平台下,如果通过桌面程序和ASP.net访问SqlServer数据库和Oracle数据库,发现网上写的好多文章都不完善,很多是无用的多余的设置,而又不讲原理,本人研究了几日,经证实如下设置完全能满足要求。 前提:OS:CentOS5.5 A.安装mono2.6 增加一个

这几天研究Linux平台下,如果通过桌面程序和ASP.net访问SqlServer数据库和Oracle数据库,发现网上写的好多文章都不完善,很多是无用的多余的设置,而又不讲原理,本人研究了几日,经证实如下设置完全能满足要求。

前提:OS:CentOS5.5

A.安装mono2.6

增加一个新的代理文件,写入http://ftp.novell.com/pub/mono/download-stable/RHEL_5/。这是mono官方提供的针对CentOS的最新的mono平台。

yum --disablerepo=extras *mono* (注意:/etc/yum.repos.d/CentOS-Base.repo中的[extras]节也有一个版本的mono,不过很老了应该是1.1版本的,这里屏蔽掉了这个源,从而只安装最新版本的mono)

安装完后,会自动修改httpd相应的设置,无需手工再修改之。

B.安装freetds

yum install freetds

C.安装OracelInstantClient

去官方下载.zip压缩文件即可,就几十MB大小,解压到/opt/oracle/。

0. Linux下访问Oracle和SqlServer的小工具

 0.1命令行访问SqlServer

        安装完freetds后,会安装一个名为tsql的小工具,基本使用方法:

   #tsql -S SqlServer服务器IP地址 -p 端口号 -U 用户名 -P 密码

  正确登陆后,出现如下提示符:

  >

  输入

 >select * from 表名;回车

 >go;回车

然后会显示查询的内容。

 0.2命令行访问Oracle

 安装好InstantClient后,再下载一个sqlplus(很小)解压都同一目录下即可。把这一目录加入PATH

 然后执行如下命令连接远程Oracle数据库

#sqlplus 用户名/密码@服务器IP/实例名

成功登陆后显示

SQL >

输入

SQL> select * from 表名;回车

即可看到查询结果。

1. Linux下mono访问SqlServer数据库

 

调用方式:

mono在调用方式上与.net Framework完全相同,都是采用System.Data.SqlClient命名空间中的类来完成数据库操作。

实现原理:

System.Data.SqlClient中的类库的实现靠的是通过P/Invoke调用freetds共享库的函数完成。所以必须安装freetds,在CentOS5.5中通过yum install freetds完成。

示例代码:

 sqlserver.cs

 

编译命令:gmcs -r:System.Data sqlserver.cs

运行命令:mono sqlserver.exe

 

 

2.Linux下mono访问Oracle数据库

 

调用方式:

mono在调用方式上与.net Framework完全相同,都是采用System.Data.OracleClient命名空间中的类来完成数据库操作。

需要注意的是,目前微软已经不建议在.net 平台上用System.Data.OracleClient了,因为Oracle自己提供了一个Oracle.Data.Access类库来提供.net对Oracle数据库的访问。然而在mono平台上,System.Data.OracleClient仍是最好的访问Oracle数据库的方式。

实现原理:

System.Data.OracleClient中的类库的实现靠的是通过P/Invoke调用libclntsh.so共享库的函数完成。需要安装Oracle提供的InstantClient,这个软件是典型的绿色软件,下载后解压即可。需要注意的是要让mono能找到这个共享库,因此需要把它所在的路径加入LD_LIBRARY_PATH环境变量。例如解压后目录是/opt/oracle/instantclient_11_2,那么需要在/etc/profile中,写入如下:

export LD_LIBRARY_PATH=/opt/oracle/intantclient_11_2:$LD_LIBRARY_PATH,另外还需要设置NLS_LANG如下:

export NLS_LANG=AMERICAN_AMERICA.UTF8

最后做个软连接

ln -s /opt/oracle/instantclient_11_2/libclntsh.so.0.0.0 /opt/oracle/intantclient_11_2/libclntsh.so

然后执行ldconfig刷新缓存。

此时mono已经能够访问oracle数据库了。

示例代码:

 oracle.cs

编译指令:gmcs -r:System.Data.OracleClient oracle.cs

运行指令:mono oracle.exe

3.基于Apache的mono对SqlServer的访问

 在CentOS下,如果通过yum安装的freetds和mono以及mod_mono,那么没有什么问题了,与1基本相同。不再累述。

4.基于Apache的mono对Oracle的访问

这里需要注意,在/etc/profile设定的LD_LIBRARY_PATH和NLS_LANG等环境变量,在httpd里并不知情,httpd是服务程序,不是从shell启动的。此时/opt/novell/mono/bin/mod-mono-server也是通过httpd启动的,所以也不知道这些环境变量,这样导致了mono无法确定需要通过p/Invoke调用的libclntsh.so,所以会导致无法访问Oracle.解决方式:

修改/opt/novell/mono/bin/mod-mono-server,修改后如下:

#!/bin/sh

export LD_LIBRARY_PATH=/opt/oracle/instantclient_11_2:$LD_LIBRARAY_PATH

export NLS_LANG=AMERICAN_AMERICA.UTF8

exec /opt/novell/mono/bin/mono $.................................

然后重新启动httpd服务即可。

 

如果需要在JDBC下访问Oracle和SqlServer,参见我的另一篇博客:http://blog.csdn.net/smstong/article/details/8129536

 

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱門文章

兩個點博物館:邦格荒地地點指南
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章

兩個點博物館:邦格荒地地點指南
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章標籤

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

sqlserver資料庫中已存在名為的物件怎麼解決 sqlserver資料庫中已存在名為的物件怎麼解決 Apr 05, 2024 pm 09:42 PM

sqlserver資料庫中已存在名為的物件怎麼解決

sqlserver怎麼匯入mdf文件 sqlserver怎麼匯入mdf文件 Apr 08, 2024 am 11:41 AM

sqlserver怎麼匯入mdf文件

sqlserver服務無法啟動怎麼辦 sqlserver服務無法啟動怎麼辦 Apr 05, 2024 pm 10:00 PM

sqlserver服務無法啟動怎麼辦

如何在Java中存取JsonNode的JSON欄位、陣列和巢狀物件? 如何在Java中存取JsonNode的JSON欄位、陣列和巢狀物件? Aug 30, 2023 pm 11:05 PM

如何在Java中存取JsonNode的JSON欄位、陣列和巢狀物件?

sqlserver資料庫在哪裡 sqlserver資料庫在哪裡 Apr 05, 2024 pm 08:21 PM

sqlserver資料庫在哪裡

sqlserver誤刪資料庫怎麼恢復 sqlserver誤刪資料庫怎麼恢復 Apr 05, 2024 pm 10:39 PM

sqlserver誤刪資料庫怎麼恢復

怎麼查看sqlserver連接埠號 怎麼查看sqlserver連接埠號 Apr 05, 2024 pm 09:57 PM

怎麼查看sqlserver連接埠號

sqlserver安裝失敗怎麼樣刪除乾淨 sqlserver安裝失敗怎麼樣刪除乾淨 Apr 05, 2024 pm 11:27 PM

sqlserver安裝失敗怎麼樣刪除乾淨

See all articles