ASP.NET webforms在注册时为每个用户创建数据库



我遇到了一个我解决不了的小问题。

我已经建立了一个ASP。. NET webforms应用程序,它将被不同的公司使用,每个公司将有自己的数据库。

当用户在网站上成功注册时,数据库创建过程开始,每个公司可能有几个用户。

应用程序包含一个主数据库,其中存储订阅者信息:

|ID| |SubscriberName| |SubscriberEmail| |SubscribedDate|

,然后使用以下代码为这个特定的用户创建一个数据库:

cmd.CommandText = "select * form Subscriber";
DataTable customerscount = new DataTable();
sda.Fill(customerscount);
var createcmd = con.CreateCommand();
string dbname;
if (customerscount.Rows.Count > 0)
{
int subcount = customerscount.Rows.Count;
dbname = "User" + subcount.ToString();
}
else
{
dbname = "User1";
}
createcmd.CommandText = "CREATE DATABASE " + dbname + " COLLATE ARABIC_CI_AI_KS";
createcmd.ExecuteNonQuery();
SqlConnection newcon = new SqlConnection();
string oldconnetion = ConfigurationManager.ConnectionStrings["myConnectionString"].ConnectionString;
SqlConnectionStringBuilder scb = new SqlConnectionStringBuilder(oldconnetion);
scb.InitialCatalog = dbname;
newcon.ConnectionString = scb.ConnectionString;
SqlCommand newcmd = new SqlCommand();
cmd.Connection = newcon;
newcon.Open();
newcmd.CommandText = "CREATE TABLE [Users] ([ID][int] IDENTITY(1, 1) NOT NULL," +
"[Fullname] [nvarchar] (max) NULL," +
"[Username] [nvarchar] (max) NULL," +
"[Password] [nvarchar] (max) NULL," +
"[Type] [nvarchar] (max) NULL," +
"CONSTRAINT [PK_User] PRIMARY KEY CLUSTERED([ID] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]";
newcmd.ExecuteNonQuery();

与我没有包括的其他表。

我的问题是登录时如何找出用户的数据库?

Users表将在新创建的表中:

|ID| |Fullname| |Username| |Password|

对不起,文字太长了

问题很好地回答了这个问题。你真的,但真的不希望创建一个新的数据库为每个公司。您所做的是创建公司表,然后系统上的每个用户都可以属于公司(在用户表中)。即使这样,您也必须小心,因为如果不同公司的两个用户具有相同的用户名和登录名会发生什么?(提示:这是不允许的)。试着运行一个网站,有各种不同的网页,每个页面都要挑选,要知道,要选择在什么数据库上操作是巨大的混乱等待发生,所有的数据库代码将是困难的。

甚至一个简单的查询得到他们的项目?您现在不能使用标准的数据例程,那么它将从哪个数据库中提取数据呢?试图运行一个拥有50个不同数据库的网站?不,不可能发生——就是不可能。

你需要规范化的数据。因此,例如,我们不为12个月的发票创建12个表,而是创建一个表,并添加名为发票日期的列。现在,你想要多少个月我们就有多少个月。

如果你需要按公司区分使用-说他们属于哪个公司?

那么你需要一个公司表。下一个问题是,谁将发布登录,或者他们可以自行注册?如果他们可以自行注册,他们能注册任何公司吗?谁来管理这个?

无论如何,如果您有许多公司,并且用户属于给定的公司,那么您需要一个名为companies的表,然后用户位于与表公司相关的用户表中。

我的意思是,如果明天你需要给网站添加一个新功能,这需要你在数据库中添加一个小的新列,比如用户的夏季住所和电话号码,会发生什么?

现在,有50个数据库,你必须去尝试更新,修改和维护50个数据库?如何添加一个简单的新列,或对软件进行一个简单的设计更改?

这是一个不开始,一个非常糟糕的设计-它就是。这样的网站根本无法管理。