比如,在一个ERP系统中,我有如下三个需求:
1,我想要记录
对数据库的每个sql操作都是由那个ERP用户操作的。
2,我的表单的操作人都要以当前操作该单的用户作为数据库中对应的表对应字段的默认值。那么这个字段的默认值应该怎么写呢?
3,多个asp.net应用程序的数据都存在一个数据库中,那么我们又要如何去区别当前数据查询是针对于那个应用程序的呢?
这三个需求,我们都可以在数据库链接中指定Application Name属性来实现。
我们先来看看MSDN上面对Application Name属性的解释。
Application Name属性:获取或设置应用程序的名称,用于标识应用程序特有的用户。即,相同的用户名可对应于指定了不同 ApplicationName 的多个 ASP.NET 应用程序并存于数据库中。这使得多个应用程序可以使用同一个数据库来存储用户信息而不陷入用户名重复的冲突中。或者,多个 ASP.NET 应用程序可以通过指定相同的 ApplicationName 来使用同一用户数据库。ApplicationName 可以编程方式设置或者在 Web 应用程序的配置中以声明方式设置。举个例子来说明:
我们一般的数据库连接字符串都是这样写的:
Data Source=服务器地址;uid=用户名;password=密码;initial catalog=数据库名称
并没有为连接指明Application Name属性,那么,它默认就是.Net SqlClient Data Provider。
现在我们为连接指明Application Name属性,即:
Data Source=服务器地址; uid=用户名;password=密码;initial catalog=数据库名称;application name=当前操作人
那么,它的值就是当前操作人了。
Sql Server连接步骤,可查看本站:
SQL Server连接步骤(连接字符串)详解指明Application Name属性后,那么我们要如何在数据库获取到它的值呢?用数据库的系统函数app_name()就好了。
app_name()函数的作用:返回当前会话的应用程序名称(如果应用程序进行了设置)。
如果我们直接在microsoft sql server management studio中查询app_name函数
select app_name()
会返回结果:Microsoft SQL Server Management Studio - 查询
如果我们是用"Data Source=服务器地址;uid=用户名;password=密码;initial catalog=数据库名称"来连接数据库,那么app_name返回的结果就是:.Net SqlClient Data Provider
如果我们用"Data Source=服务器地址; uid=用户名;password=密码;initial catalog=数据库名称;application name=当前操作人"来连接数据库,那么app_name返回的结果就是当前操作人了。
到了这里,本章最开始的三点需求,我们就很容量的解决了吧。
1,要知道当前的sql操作是那个用户执行的,直接用select app_name()查询就知道了。
2,用app_name()作为字段的默认值。
3,在每个操作sql语句中,都加上where 应用程序=app_name()即可。d