.Net连接Oracle数据库

因为公司前段时间有个项目需要用到oracel数据库,不巧的是,我只玩过SQL SERVICE,而且客户得数据库还不对外开放,下面说说步骤吧

1、数据库连接还是和oracel大同小异的,我是在Web.config中配置的数据库连接

 <add name="OracleConnectionstring" connectionString="Data Source=数据库; Persist Security Info=True;User ID=用户名;Password=密码;Unicode=true" providerName="System.Data.OracleClient"/>
View Code

2、这是我在网上下的一个Oracel的帮助文档,还算能满足的我的需求

 /// <summary>
    /// 数据库帮助工具
    /// </summary>
    public class OracleHelper
    {
        //数据库的链接字符串,取自Web.config文件(sql)
        //private static string connString = ConfigurationManager.ConnectionStrings["AdministrativeLaw"].ConnectionString;

        private static string connString = null;

        private static SqlConnection conn = null;

        //数据库的链接字符串,取自Web.config文件(access)
        //private static string connStringAccess = ConfigurationManager.ConnectionStrings["access_con"].ConnectionString

        //+ HttpContext.Current.Server.MapPath(ConfigurationManager.ConnectionStrings["access_path"].ConnectionString);

        private static string connStringAccess = null;

        private static OleDbConnection connAccess = null;

        //数据库的链接字符串,取自Web.config文件(oracle)

        private static string connStringOracle = ConfigurationManager.ConnectionStrings["OracleConnectionstring"].ConnectionString;

        private static OracleConnection connOracle = null;

        //返回结果集(查询结果)

        private static OracleDataReader resultOracle = null;    //oracle

        //返回(增删改)的更新行数

        private static int count = 0;

        #region OpenConn

        /// <summary>

        /// 打开connection

        /// </summary>

        private static void OpenConn(string whichMethod)
        {

            switch (whichMethod)
            {

                case "sql":

                    conn = new SqlConnection(connString);

                    conn.Open();

                    break;

                case "access":

                    connAccess = new OleDbConnection(connStringAccess);

                    connAccess.Open();

                    break;

                case "oracle":

                    connOracle = new OracleConnection(connStringOracle);

                    connOracle.Open();

                    break;

            };

        }

        #endregion


        #region oracle dbhelper

        #region oracle查询

        /// <summary>

        /// 查询方法

        /// </summary>

        /// <param name="sqlName">要执行的存储过程的名称或者oracle语句</param>

        /// <param name="para">要执行的存储过程的参数数组,执行oracle时用不到</param>

        /// <param name="whichMethod">使用的查询方法(存储过程StoredProcedure\oracle语句Text)</param>

        /// <returns>得到的结果集</returns>

        public static DataTable Select(string oracle, OracleParameter[] para, CommandType cmdType)
        {
            try
            {

                OpenConn("oracle");

                using (OracleCommand com = new OracleCommand(oracle, connOracle))
                {

                    com.CommandType = cmdType;

                    if (para.Length != 0)

                        com.Parameters.AddRange(para);

                    resultOracle = com.ExecuteReader();//返回数据集

                };

            }

            catch (SqlException e2)
            {

                throw new Exception(e2.Message, e2);

            }
            DataTable dt = DAL.Common.EntityTansformation.ConvertDataReaderToDataTable(resultOracle);
            return dt;

        }

        #endregion

        #region oracle增删改

        /// <summary>

        /// 增删改方法

        /// </summary>

        /// <param name="sqlName">要执行的存储过程的名称或者oracle语句</param>

        /// <param name="para">要执行的存储过程的参数数组,执行oracle语句时用不到</param>

        /// <param name="whichMethod">使用的更新方法(存储过程StoredProcedure\oracle语句Text)</param>

        /// <returns>更新得到的行数</returns>

        public static int UpDeInstu(string oracle, OracleParameter[] para, CommandType cmdType)
        {

            try
            {

                OpenConn("oracle");

                using (OracleCommand com = new OracleCommand(oracle, connOracle))
                {

                    com.CommandType = cmdType;

                    if (para.Length != 0)

                        com.Parameters.AddRange(para);

                    count = com.ExecuteNonQuery();//返回受影响的行数

                };

            }

            catch (SqlException e2)
            {

                count = 0;

                throw new Exception(e2.Message, e2);

            }

            return count;

        }

        #endregion

        #endregion



        #region 关闭连接

        /// <summary>

        /// 最后需要调用的关闭函数,关闭与数据库的链接

        /// </summary>

        public static void close()
        {

            #region oracle

            if (resultOracle != null)

                resultOracle.Close();

            if (connOracle != null)

                connOracle.Close();

            #endregion

        }

        #endregion
    }
View Code

3、因为我调的客户提供的存储过程,Oracel的存储过程和我们SQLservice的有点区别,他需要标明传入参数,和传出参数(游标)  

 

注意:在这期间遇到有几个问题,一个是版本问题,我们原本的框架是32位的IIS,而我装的是Oracel 64位的,所以一直连不上,后来没办法,只能重新搭建框架

        还有就是如果连的不是本地数据库,需要在这个目录下配置远程连接

其他的问题就是安装数据库、添加监听之类的问题了,有需要的话我下一篇再和大家说

 

posted @ 2016-07-27 23:55  CYHbke  Views(111)  Comments(0)    收藏  举报