首页 新闻 会员 周边

C#程序,两个人同时操作的话,会创建两个不同的数据库,分别为T1,T2,第二个人创建的信息怎么到了T1中?

1
悬赏园豆:15 [待解决问题]

同一个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#连接数据库的字符串了)?各自要用各自的数据库 

Hamilton Tan的主页 Hamilton Tan | 初学一级 | 园豆:167
提问于:2014-12-03 22:01
< >
分享
所有回答(5)
0

问题出在你数据库连接字符串的构建上。

Cherbim | 园豆:323 (菜鸟二级) | 2014-12-03 23:53

是的 不同时操作的话是没有这个问题的,现在主要是并发操作导致的,有什么其他方法解决吗?

支持(0) 反对(0) Hamilton Tan | 园豆:167 (初学一级) | 2014-12-04 09:27
0

根据用户登录刚解析配置文件,切换连接数据库字符串。要不然都是连的是同一个数据库。

Mr.Brian | 园豆:1518 (小虾三级) | 2014-12-04 09:10

我这里的C#连接数据库字符串是动态生成的,所以你说的这种切换是不行的。

有可能两个人以上同时处理,就生成两个以上的数据库。有其他方法解决吗?

支持(0) 反对(0) Hamilton Tan | 园豆:167 (初学一级) | 2014-12-04 09:30

@Hamilton Tan: 要不然你把动态生成的那个数据库序列化成类,当用户登录的时候你可以根据用户的部门或者登陆名这种规则,然后动态链接你所需要的数据库。你试试。关键看你的需求到底什么样的?同时处理那你要考虑到并发的问题,自己想好了。再动手!

支持(0) 反对(0) Mr.Brian | 园豆:1518 (小虾三级) | 2014-12-04 12:10

@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;

支持(0) 反对(0) Hamilton Tan | 园豆:167 (初学一级) | 2014-12-04 12:27

@Hamilton Tan: initial catalog={0},你看看不同的人里面的内容Data Source=IP地址;Initial Catalog={0};User ID=***;Password=***.Initial Catalog={0};里面的传递的参数是否正确?是否一直是同一个?能不能连上数据库?你自己先把问题排除几个因素!代码是你自己写的,要有驾驭你写的代码能力。别人只能了解一点!

支持(0) 反对(0) Mr.Brian | 园豆:1518 (小虾三级) | 2014-12-04 12:36

@Mr.Brian:  这里都通了,传值都正常,关键是怎么把连接字符串从控制器里面的方法传到DBO,DBO传到DAO,再传到基类的的connection对象里面去

支持(0) 反对(0) Hamilton Tan | 园豆:167 (初学一级) | 2014-12-04 21:56
0

同意二楼,楼主请回家面壁思过。

爱编程的大叔 | 园豆:30839 (高人七级) | 2014-12-04 10:24

同意二楼,楼主请回家带孩子。

支持(0) 反对(0) Halower | 园豆:1723 (小虾三级) | 2014-12-04 10:29

关键是怎么把连接字符串从控制器里面的方法传到DBO,DBO传到DAO,再传到基类的的connection对象里面去。

支持(0) 反对(0) Hamilton Tan | 园豆:167 (初学一级) | 2014-12-04 21:56

@Halower: 关键是怎么把连接字符串从控制器里面的方法传到DBO,DBO传到DAO,再传到基类的的connection对象里面去。

支持(0) 反对(0) Hamilton Tan | 园豆:167 (初学一级) | 2014-12-04 21:57
0

事件驱动

Halower | 园豆:1723 (小虾三级) | 2014-12-04 10:28

怎么驱动?

支持(0) 反对(0) Hamilton Tan | 园豆:167 (初学一级) | 2014-12-04 12:48

大师给点提示啊

支持(0) 反对(0) Hamilton Tan | 园豆:167 (初学一级) | 2014-12-04 21:57

@Hamilton Tan: 就是A在进行操作的时候触发了事件已告知B也要进行XX操作,简单的实现就是观察者模式,复杂点就到了领域事件了,那就不是一两句说得清的

支持(0) 反对(0) Halower | 园豆:1723 (小虾三级) | 2014-12-05 00:45

@Hamilton Tan: 我不是大师,一起讨论,呵呵

支持(0) 反对(0) Halower | 园豆:1723 (小虾三级) | 2014-12-05 00:46
0

在语句上面加上个use T1/T2

有好多问题噶波风水门 | 园豆:218 (菜鸟二级) | 2015-01-06 14:05
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册