首页 新闻 会员 周边 捐助

关于动态获取数据库连接字符串

0
悬赏园豆:20 [已解决问题] 解决于 2014-12-15 10:55

SQLHelp类中的方法,原来数据库连接字符串(SqlCon)是静态的,从config文件中获取,现在我要将他改为动态的,从cookie或者session 中获取。

如果,在每个方法里,添加一个参数用来传递SqlCon,就会很麻烦。

另外SQLHelp 在三层中DAL层里面,调用不了 cookie

亦有哭亦有笑的主页 亦有哭亦有笑 | 初学一级 | 园豆:5
提问于:2014-09-18 11:18
< >
分享
最佳答案
0

自己写一个静态类,通过这个静态类来获取连接字符串。

通过这个静态类去读Cookie、Session之类的数据。

收获园豆:20
519740105 | 大侠五级 |园豆:5810 | 2014-09-18 11:26

因为是面对多用户,如果用静态类的应该不行吧。主要是DAl层获取不了cookie。或者有没有一种方法,为其他方法新增一个参数

亦有哭亦有笑 | 园豆:5 (初学一级) | 2014-09-18 11:30

@亦有哭亦有笑: 静态类是起到一个代理作用,而不是在静态类里写死。

你的DAL不能处理cookie,这个简单,你可以在DAL里定义一个获取连接字符串的接口,比如:IConnectionStringService,然后通过获取这个接口的实现服务(简单的,可以使用IServiceProvider)来获取,而你的接口的实现则可以放在表示层,只要把表示层实现的接口服务添加到IServiceContainer里就好了。

 

                        DAL->ConnectionStringSingleton->IConnectionStringService

                                                   |

                                        ServiceContainer

                                                   |

                        UI->ConnectionStringService->Session/Cookie

 

这个,也叫依赖注入,你可以多了解下依赖注入技术。

519740105 | 园豆:5810 (大侠五级) | 2014-09-18 11:48

@519740105: 按照你的方法 ,我在DAL定义了接口

interface IConnectionStringService
        {
        string getValue();
       
        }
在UI层实现接口

public class ConnectionStringSingleton : IConnectionStringService
{
  private string strCon=System.Web.HttpContext.Current.Session["strCon"].ToString();
  public string getValue()
  {
  return strCon;
  }
}

 

提示“

错误 50 “DAL.IConnectionStringService”不可访问,因为它受保护级别限制 

”,我是不是还少了什么啊

亦有哭亦有笑 | 园豆:5 (初学一级) | 2014-09-18 14:27

@亦有哭亦有笑: 

interface IConnectionStringService

修改为

public interface IConnectionStringService

519740105 | 园豆:5810 (大侠五级) | 2014-09-18 14:40

@519740105: 

我在DAL层调用的时候 

IConnectionStringService iss = new IConnectionStringService();
string connectionStrings = iss.getValue();

提示“无法创建抽象类和接口的实例”,在DAL层里面该怎么调用呢

亦有哭亦有笑 | 园豆:5 (初学一级) | 2014-09-18 15:19

@亦有哭亦有笑: 

看你又哭又笑的~~~

接口怎么能new呢?

解决这个问题的方案

1、在UI层:使用ServiceContainer:ServiceContainer.AddService

2、在DAL层:使用IServiceProvider:IServiceProvider.GetService

 

另外一个方案:

1、在Dal里的ConnectionStringSingleton里,定义一个全局静态变量,类型为 IConnectionStringService

2、在UI层(可以是Global的ApplicationStart事件里)对上面的属性赋值,即把你在UI层实现的IConnectionStringService接口的类实例化后赋值过去。

519740105 | 园豆:5810 (大侠五级) | 2014-09-18 17:16

@519740105: 

面向多用户的,第二个方案应该不行吧。第一个方案还是不懂。我就想DAL获取cookie的值(多用户),还是贴代码吧。。。。。。。。。

亦有哭亦有笑 | 园豆:5 (初学一级) | 2014-09-18 18:06

@亦有哭亦有笑: 放心,行的,只要你在ConnectionStringService里实现多用户功能就OK了。

519740105 | 园豆:5810 (大侠五级) | 2014-09-18 18:08

@519740105: 

弄晕 了 能不能直接放代码,在DAL中调用 cookie(strCon)

亦有哭亦有笑 | 园豆:5 (初学一级) | 2014-09-18 20:02

@亦有哭亦有笑: 诶,都跟你说很清楚了,朋友,基础啊!忙呢,上代码是要时间和精力的。

519740105 | 园豆:5810 (大侠五级) | 2014-09-19 08:34

@519740105: 

网上 也查了一些资料,还是不会写,要是有时间的话,就辛苦写一下。 

 我也继续努力。。。。

亦有哭亦有笑 | 园豆:5 (初学一级) | 2014-09-19 17:47
其他回答(3)
0

1、构造函数可以传值的,从controller-bll-dal。

2、在dal中也是能够拿到当前HttpContext的,多线程下失效。

幻天芒 | 园豆:37207 (高人七级) | 2014-09-18 12:21
0

多配几个放到webconfig里面啊,怎么可以将字符串放到cookie,被别人看到怎么办?还有session,丢失怎么办?

Cat Qi | 园豆:761 (小虾三级) | 2014-09-18 16:55

因为有多个服务器(动态,不确定),他们的数据库结构相同,只是数据内容不同。怎么放config

支持(0) 反对(0) 亦有哭亦有笑 | 园豆:5 (初学一级) | 2014-09-18 16:59

@亦有哭亦有笑: 对多个数据库做集群啊,数据不多的话,使用一个数据库负责汇总其他的数据,用来单独做查询。

支持(0) 反对(0) Cat Qi | 园豆:761 (小虾三级) | 2014-09-18 17:02
0

把数据库连接字符串放到COOKIE或者SESSION感觉这样的设计就有问题,你最好换个方式去实现你的这个功能。

不就是多了几个字符串吗?在WEB.CONFIG多配几个,再根据情况去选择使用哪个。

Alex_QY1987 | 园豆:1888 (小虾三级) | 2014-09-19 15:14
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册