C# 如何在用户登录后访问链接到该用户的特定数据

C# 如何在用户登录后访问链接到该用户的特定数据,c#,sql,sql-server,tsql,C#,Sql,Sql Server,Tsql,我创建了一个包含6个表的数据库,并在不同的模式下使用了15次。每个架构代表一个校园/学校 我需要完成的任务是创建一个登录名,在用户/教师登录后,它应该只显示链接到用户/教师的学生和信息 我可以创建一个基本的UWP应用程序登录,比较SQL数据库中的用户名和密码 我只需要一些指导原则,说明我需要如何处理这个问题,以便只检索登录的用户信息 我期望的结果是,当用户1登录时,只显示链接到该用户的信息。您会认为这种方法可能会有问题,但我们还是继续使用它吧。在数据库中,每个对象都属于一个模式-正确吗?通常您会

我创建了一个包含6个表的数据库,并在不同的模式下使用了15次。每个架构代表一个校园/学校

我需要完成的任务是创建一个登录名,在用户/教师登录后,它应该只显示链接到用户/教师的学生和信息

我可以创建一个基本的UWP应用程序登录,比较SQL数据库中的用户名和密码

我只需要一些指导原则,说明我需要如何处理这个问题,以便只检索登录的用户信息


我期望的结果是,当用户1登录时,只显示链接到该用户的信息。

您会认为这种方法可能会有问题,但我们还是继续使用它吧。在数据库中,每个对象都属于一个模式-正确吗?通常您会编写如下查询

select col1 ... from orders order by ...;
现在,实际使用哪个表来满足该查询?您可能了解了dbo模式,因为它存在于每个数据库中。如果仅按名称引用表,则数据库引擎必须找到要使用的实际表。它将首先查看当前表中是否存在该表。如果是,则使用该表。如果没有,则引擎将针对该表进行调整

知道了这一点,您就可以编写查询来利用这种逻辑。注意“可以”-这不是一个建议,但它会实现你的目标。如果使用一个部分名称编写查询,则所有这些名称将在执行时相对于当前用户的默认架构

因此,假设用户X的默认模式为Z。您的应用程序尝试执行查询“按orderDate desc;从orders中选择*”。表Z.orders将用作源(如果存在)。如果该表在模式Z中不存在,引擎将使用dbo.Orders。如果该表不存在,将生成一个错误


那么,无论你在应用程序中使用什么框架,这都能起作用吗?不知道。还要注意,您正在编写应用程序。所有这些都可以在自己编写的代码中完成。如果您可以动态地向查询中添加模式名称,那么您也可以出于任何原因进行各种“自定义”结果。非常简单-这只是所有的代码,所以做任何你想做的

重复相同的表只是为了分离内容(在这种情况下,这似乎是一种多客户端问题),在几乎任何情况下,都是错误的方法。您应该使用类似于
ClientID
和复合键的东西。您可以使用iTVFs返回为给定ClientID筛选的结果集。在您的方法中,每个客户机都有一个专用数据库可能更好。。。多解释一下你的目标可能会有帮助。。。这是培训/家庭作业练习吗?请提供更多的背景…这是一个实际作业。第一个任务是创建数据库,第二个任务我们需要创建应用程序。。。是否有任何需要迫使您采用这种方法,或者您只是认为每个客户机一个模式可能是一个好概念?换句话说:不同的方法可以接受吗?这是我第一次作业中的要求,为每个校园/学校创建一个模式。这些要求真的迫使你使用不同模式创建结构相同的表吗?这听起来很奇怪。。。为什么不为每个客户端创建一个主数据库并克隆它呢?您的问题似乎是,每个
从xyz.SomeTable
中选择*应该神奇地知道哪个客户端绑定模式应该替换“xyz”。对的您可以为每个登录定义不同的默认模式,但这是通往地狱之路。。。您可以动态创建所有语句。这也是通往地狱的路。您可以将视图或ITVF与大量的
UNION-ALL
WHERE
一起使用。又是一条通往地狱的路。。。