同一个ASP.net MVC(C#) 程序,会创建两个不同的数据库,分别为T1,T2,第二个人创建的信息怎么到了T1中? 这个怎么解决?
1.正确的应该是 我创建数据库比如Test1DB之后,动态生成连接数据库的字符串,然后新增一条记录A,然后登陆跳转到相应的 数据库(Test1DB )中。
另外一个人创建数据库比如Test2DB之后,动态生成连接数据库的字符串,然后新增一条记录B,这条记录应该是存在(Test2DB )中,而不是存在Test1DB中。
两个人同时操作(也就是并发操作)
注意:asp.net MVc 3(C#)程序,初始化程序,新建数据库,动态生成连接数据库的字符串(data source=192.168.1.1;initial catalog={0};Connect Timeout=200;integrated security=false;persist security info=True;User ID={1};Password={2}; pooling=true; Max Pool Size=200 就是这个里面的值是变化的) 。
动态连接字符串处理的代码如下:
1. ReadDbString rdb = new ReadDbString();
rdb.SetDbConnectionString(conn);
conn 为data source=192.168.1.1;initial catalog={0};Connect Timeout=200;integrated security=false;persist security info=True;User ID={1};Password={2}; pooling=true; Max Pool Size=200 动态获取
2.
/// <summary>
/// 动态数据库连接字符串
/// </summary>
public class ReadDbString
{
public string DbConnectionString = string.Empty;
public void SetDbConnectionString(string strConnection)
{
DbConnectionString = strConnection;
}
}
3.
//获取连接数据库的字符串
public SqlTransConn getConnStr()
{
string connStr = System.Configuration.ConfigurationManager.ConnectionStrings[this.ConnectionName].ConnectionString;
ReadDbString rdb = new ReadDbString(); //在实例化的话,rdb.DbConnectionString;这个值为空。
if (!string.IsNullOrEmpty(rdb.DbConnectionString))
{
connStr = rdb.DbConnectionString;
}
SqlTransConn con = new SqlTransConn(connStr);
return con;
}
这个问题的意思就是你购买我一个软件之后,你安装之后,生成一个数据库A,你安装之后生成一个数据库B,分别跳转到各自库对应的系统中。
情况是这样的 就是淘宝可以购买服务,比如A公司的CRM系统(比如自己开发的)要放在淘宝上,你注册成淘宝卖家的时候,可以在淘宝服务上购买A公司的CRM系统,淘宝卖家购买了A公司的CRM系统的服务之后,需要进行初始化CRM系统(就是新建一个数据库(TestA),动态生成C#连接数据库的字符串),通过授权,需要把淘宝卖家店铺的信息,存在TestA库中的店铺表中,然后跳转到TestA所在库的CRM系统中。同个人同时操作(并发)的时候,也就是第二个人创建的信息存在第一人创建库的信息中去了(不知道为什么第二个人读取了第一个人的C#连接数据库的字符串了)?各自要用各自的数据库
问题出在你数据库连接字符串的构建上。
是的 不同时操作的话是没有这个问题的,现在主要是并发操作导致的,有什么其他方法解决吗?
根据用户登录刚解析配置文件,切换连接数据库字符串。要不然都是连的是同一个数据库。
我这里的C#连接数据库字符串是动态生成的,所以你说的这种切换是不行的。
有可能两个人以上同时处理,就生成两个以上的数据库。有其他方法解决吗?
@Hamilton Tan: 要不然你把动态生成的那个数据库序列化成类,当用户登录的时候你可以根据用户的部门或者登陆名这种规则,然后动态链接你所需要的数据库。你试试。关键看你的需求到底什么样的?同时处理那你要考虑到并发的问题,自己想好了。再动手!
@Mr.Brian: 程序已经写好了,主要代码:
动态连接字符串处理的代码如下:
1. ReadDbString rdb = new ReadDbString();
rdb.SetDbConnectionString(conn);
conn 为data source=192.168.1.1;initial catalog={0};Connect Timeout=200;integrated security=false;persist security info=True;User ID={1};Password={2}; pooling=true; Max Pool Size=200 动态获取
2.
/// <summary>
/// 动态数据库连接字符串
/// </summary>
public class ReadDbString
{
public static string DbConnectionString = string.Empty;
public void SetDbConnectionString(string strConnection)
{
DbConnectionString = strConnection;
}
}
3.
//获取连接数据库的字符串
public SqlTransConn getConnStr()
{
string connStr = System.Configuration.ConfigurationManager.ConnectionStrings[this.ConnectionName].ConnectionString;
if (!string.IsNullOrEmpty(ReadDbString.DbConnectionString))
{
connStr = ReadDbString.DbConnectionString;
}
SqlTransConn con = new SqlTransConn(connStr);
return con;
}
@Hamilton Tan: initial catalog={0},你看看不同的人里面的内容Data Source=IP地址;Initial Catalog={0};User ID=***;Password=***.Initial Catalog={0};里面的传递的参数是否正确?是否一直是同一个?能不能连上数据库?你自己先把问题排除几个因素!代码是你自己写的,要有驾驭你写的代码能力。别人只能了解一点!
@Mr.Brian: 这里都通了,传值都正常,关键是怎么把连接字符串从控制器里面的方法传到DBO,DBO传到DAO,再传到基类的的connection对象里面去
同意二楼,楼主请回家面壁思过。
同意二楼,楼主请回家带孩子。
关键是怎么把连接字符串从控制器里面的方法传到DBO,DBO传到DAO,再传到基类的的connection对象里面去。
@Halower: 关键是怎么把连接字符串从控制器里面的方法传到DBO,DBO传到DAO,再传到基类的的connection对象里面去。
事件驱动
怎么驱动?
大师给点提示啊
@Hamilton Tan: 就是A在进行操作的时候触发了事件已告知B也要进行XX操作,简单的实现就是观察者模式,复杂点就到了领域事件了,那就不是一两句说得清的
@Hamilton Tan: 我不是大师,一起讨论,呵呵
在语句上面加上个use T1/T2