asp.net同时连接sqlserver 和 oracle的解决方案

tony_buaa 2010-02-24 11:45:28
网站之前是asp.netl连接SQL Server的,运行正常。现在想要部分页面连接oracle,获取oracle里的数据。

自己试验半天,总是不成功,好像是同时连接两个数据库会有冲突,而且在App_Code文件夹下面有两个数据库连接的类是否有冲突?

我写的连接oracle的类如下:
public class dbora
{
public dbora()
{
}

public static OracleConnection CreateDBcon()
{
return new OracleConnection("Server=172.**.***.**;Data Source=ccora_172.**.***.**;uid=webuser;pwd=12345;");
}

}

另外,为同时连接两个数据库,web.config里应该如何设置?

求解决方案!多谢多谢!
...全文
255 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
mengfanzongfox 2010-03-05
  • 打赏
  • 举报
回复
承接上一贴!这只是大致的意思啊!大致这样调用!

using System;
using System.Collections;
using System.Collections.Specialized;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Data.Common;
using System.Collections.Generic;
namespace Maticsoft.DBUtility
{
/// <summary>
/// 数据访问抽象基础类
/// Copyright (C) 2004-2008 By LiTianPing
/// </summary>
public abstract class DbHelperSQL
{
//数据库连接字符串(web.config来配置),可以动态更改connectionString支持多数据库.
public static string connectionString = PubConstant.ConnectionString;
public DbHelperSQL()
{
}

#region 公用方法
/// <summary>
/// 判断是否存在某表的某个字段
/// </summary>
/// <param name="tableName">表名称</param>
/// <param name="columnName">列名称</param>
/// <returns>是否存在</returns>
public static bool ColumnExists(string tableName, string columnName)
{
string sql = "select count(1) from syscolumns where [id]=object_id('" + tableName + "') and [name]='" + columnName + "'";
object res = GetSingle(sql);
if (res == null)
{
return false;
}
return Convert.ToInt32(res) > 0;
}
public static int GetMaxID(string FieldName, string TableName)
{
string strsql = "select max(" + FieldName + ")+1 from " + TableName;
object obj = GetSingle(strsql);
if (obj == null)
{
return 1;
}
else
{
return int.Parse(obj.ToString());
}
}

public static DataSet RunProcedure(string storedProcName, IDataParameter[] parameters, string tableName, int Times)
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
DataSet dataSet = new DataSet();
connection.Open();
SqlDataAdapter sqlDA = new SqlDataAdapter();
sqlDA.SelectCommand = BuildQueryCommand(connection, storedProcName, parameters);
sqlDA.SelectCommand.CommandTimeout = Times;
sqlDA.Fill(dataSet, tableName);
connection.Close();
return dataSet;
}
}


/// <summary>
/// 构建 SqlCommand 对象(用来返回一个结果集,而不是一个整数值)
/// </summary>
/// <param name="connection">数据库连接</param>
/// <param name="storedProcName">存储过程名</param>
/// <param name="parameters">存储过程参数</param>
/// <returns>SqlCommand</returns>
private static SqlCommand BuildQueryCommand(SqlConnection connection, string storedProcName, IDataParameter[] parameters)
{
SqlCommand command = new SqlCommand(storedProcName, connection);
command.CommandType = CommandType.StoredProcedure;
foreach (SqlParameter parameter in parameters)
{
if (parameter != null)
{
// 检查未分配值的输出参数,将其分配以DBNull.Value.
if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) &&
(parameter.Value == null))
{
parameter.Value = DBNull.Value;
}
command.Parameters.Add(parameter);
}
}

return command;
}

/// <summary>
/// 执行存储过程,返回影响的行数
/// </summary>
/// <param name="storedProcName">存储过程名</param>
/// <param name="parameters">存储过程参数</param>
/// <param name="rowsAffected">影响的行数</param>
/// <returns></returns>
public static int RunProcedure(string storedProcName, IDataParameter[] parameters, out int rowsAffected)
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
int result;
connection.Open();
SqlCommand command = BuildIntCommand(connection, storedProcName, parameters);
rowsAffected = command.ExecuteNonQuery();
result = (int)command.Parameters["ReturnValue"].Value;
//Connection.Close();
return result;
}
}

/// <summary>
/// 创建 SqlCommand 对象实例(用来返回一个整数值)
/// </summary>
/// <param name="storedProcName">存储过程名</param>
/// <param name="parameters">存储过程参数</param>
/// <returns>SqlCommand 对象实例</returns>
private static SqlCommand BuildIntCommand(SqlConnection connection, string storedProcName, IDataParameter[] parameters)
{
SqlCommand command = BuildQueryCommand(connection, storedProcName, parameters);
command.Parameters.Add(new SqlParameter("ReturnValue",
SqlDbType.Int, 4, ParameterDirection.ReturnValue,
false, 0, 0, string.Empty, DataRowVersion.Default, null));
return command;
}
#endregion

}

}
mengfanzongfox 2010-03-05
  • 打赏
  • 举报
回复
引用 11 楼 tony_buaa 的回复:
我连接sql的时候是通过建立连接类的方式连接的,
之前web.config什么都没设置 也没在那设置连接。但如果在web.config设置新的连接,就会和之前的连接类冲突。。。。。

引用 10 楼 mengfanzongfox 的回复:
<add key="Connstr" value="server=.;database=news;uid=sa;pwd="/>
<add key="Connstr2" value="Data Source=ORCL;user=system;password=eduask;"/>
再添加一套类似上面的oracle连接方法
在调用的时候直接修改连接名称
调用sql连接
//数据库连接字符串(web.config来配置),可以动态更改connectionString支持多数据库.
public static string connectionString= PubConstant.Connstr;   
        public DbHelperSQL()
        {           
        }
调用oracle连接
public static string connectionString= PubConstant.Connstr2;
这样就行了!

大哥你既然设置了WEB连接那么之前在文件里写的就删掉啊!然后引用web的!
像我下一个帖子的那样!
tony_buaa 2010-03-05
  • 打赏
  • 举报
回复
我连接sql的时候是通过建立连接类的方式连接的,
之前web.config什么都没设置 也没在那设置连接。但如果在web.config设置新的连接,就会和之前的连接类冲突。。。。。

引用 10 楼 mengfanzongfox 的回复:
<add key="Connstr" value="server=.;database=news;uid=sa;pwd="/>
<add key="Connstr2" value="Data Source=ORCL;user=system;password=eduask;"/>
再添加一套类似上面的oracle连接方法
在调用的时候直接修改连接名称
调用sql连接
//数据库连接字符串(web.config来配置),可以动态更改connectionString支持多数据库.
public static string connectionString= PubConstant.Connstr;   
        public DbHelperSQL()
        {           
        }
调用oracle连接
public static string connectionString= PubConstant.Connstr2;
这样就行了!
mengfanzongfox 2010-03-05
  • 打赏
  • 举报
回复
<add key="Connstr" value="server=.;database=news;uid=sa;pwd="/>
<add key="Connstr2" value="Data Source=ORCL;user=system;password=eduask;"/>
再添加一套类似上面的oracle连接方法
在调用的时候直接修改连接名称
调用sql连接
//数据库连接字符串(web.config来配置),可以动态更改connectionString支持多数据库.
public static string connectionString= PubConstant.Connstr;
public DbHelperSQL()
{
}
调用oracle连接
public static string connectionString= PubConstant.Connstr2;
这样就行了!
flyerwing 2010-03-05
  • 打赏
  • 举报
回复
生成两套代码不就OK了
呵呵
tony_buaa 2010-03-05
  • 打赏
  • 举报
回复
up........
tony_buaa 2010-02-24
  • 打赏
  • 举报
回复
请问具体在web.config在什么地方配置?之前的都是web.config的默认配置,没进行配置。tks!

引用 1 楼 huwei12345 的回复:
web.config 里面配置2个连接就是了,一个sqlserver用,一个oracle用

这个时候就体现 分层的好处了。。
如果之前的项目设计的好,数据库访问层可以很轻松的去查数据
前台并不需要知道到底去哪个数据库里面查
happyrain2010 2010-02-24
  • 打赏
  • 举报
回复
首先在oracle的企业管理器中确认是否连接成功
然后根据要连接不同的数据库设置相对的配置字段
tony_buaa 2010-02-24
  • 打赏
  • 举报
回复
那按照你的写法,ip地址写在哪里呢?

另外,我也是新添加的连接字符串,但是只要连两个,就会报错:Server Error in '/' Application.


引用 2 楼 wuyq11 的回复:
不冲突,添加两个连接字符串
string  ConnectionString="Data Source=TEST;user=system;password=manager;";    OracleConnection  conn=new  OracleConnection(ConnectionString); 
wuyq11 2010-02-24
  • 打赏
  • 举报
回复
不冲突,添加两个连接字符串
string ConnectionString="Data Source=TEST;user=system;password=manager;"; OracleConnection conn=new OracleConnection(ConnectionString);
huwei12345 2010-02-24
  • 打赏
  • 举报
回复
web.config 里面配置2个连接就是了,一个sqlserver用,一个oracle用

这个时候就体现 分层的好处了。。
如果之前的项目设计的好,数据库访问层可以很轻松的去查数据
前台并不需要知道到底去哪个数据库里面查
jack15850798154 2010-02-24
  • 打赏
  • 举报
回复
引用 5 楼 tony_buaa 的回复:
请问具体在web.config在什么地方配置?之前的都是web.config的默认配置,没进行配置。tks!

引用 1 楼 huwei12345 的回复:web.config 里面配置2个连接就是了,一个sqlserver用,一个oracle用 这个时候就体现 分层的好处了。。如果之前的项目设计的好,数据库访问层可以很轻松的去查数据前台并不需要知道到底去哪个数据库里面查



在Web.config文件中,添加以下内容:
<connectionStrings>
<!--连接SQL-->
<add name="***Connection" connectionString="Database=***;Data Source=localhost;User Id=***;Password=*" />


<add 连接ORACLE/>
</connectionStrings>

在程序中利用以下代码调用:
string connString = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["ipmanageConnection"].ToString();

看看对你有用吗?不对的地方还请包涵。。。
jackson627 2010-02-24
  • 打赏
  • 举报
回复
添加一个DB.config文件把配置信息全部写进去 , 要实现连个数据库的随意切换 ,有多态去实现

62,073

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧