【问题标题】:SQL's equivalent to C#'s User.Identity.NameSQL 等价于 C# 的 User.Identity.Name
【发布时间】:2015-01-12 13:38:54
【问题描述】:

是否有等效于 ASP.Net/C# 的“User.Identity.Name”的 SQL 来输出用户的 windows 域?我在 ASP.net Web 应用程序中有一个表单视图,其中一个文本框用于用户名。用户名是从用户的 windows 域中提取的。当我填写表单时,User.Identity.Name 命令将该值放在文本框中,但是当我将记录插入到表示 SQL dababase 表的网格视图中时,什么也没有显示。所以我认为这与更改“用户名”下的 sql 表设计中的“默认值或绑定”值有关,但我不确定命令是什么。

另一个在翻译中遇到问题的字段是 UserDate。这将检索插入记录的当前日期和时间。同样,当我填写 formview 表单时,它会自动使用当前日期和时间填充 Userdate 字段,这正是我想要的,但是当我插入时,gridview 中没有显示任何内容。但是,如果我手动将数据/记录作为查询直接插入 SQL 服务器,其中不包括 UserDate 列,gridview 会显示 date 和 time ,但它不会显示在 SQL 数据库中,而其他所有内容都会显示。

HTML 标记:

            Username:
            <asp:TextBox ID="UsernameTextBox" runat="server" Text='<%# User.Identity.Name %>' />
            <br />
            UserDate:
            <asp:TextBox ID="UserDateTextBox" runat="server" Text='<%#  DateTime.Now %>' />
            <br />

我用来直接将记录填充到数据库中的 SQL 查询:

insert into dbo.PO_Table (PO_ID, PO_Title, Date_Received, Date_Completed)
Values(100,'First PO',01/01/01,02/02/02);

insert into dbo.PO_Table (PO_ID, PO_Title, Date_Received, Date_Completed)
Values(200,'Second PO',03/03/03,04/04/04);

insert into dbo.PO_Table (PO_ID, PO_Title, Date_Received, Date_Completed)
Values(300,'Third PO',05/05/05,06/06/06);

我的插入存储过程:

 ALTER PROCEDURE [dbo].[InsertPO]
    @PO_ID INT,
    @PO_Title nvarchar(50),
    @Date_Received date,
    @Date_Completed date,
    @PO_Note nvarchar(50),
@Username varchar(30),
@UserDate date


AS
BEGIN
INSERT INTO dbo.PO_Table(PO_ID,PO_Title,Date_Received,Date_Completed,Username,UserDate,PO_Note)
VALUES(@PO_ID,@PO_Title,@Date_Received,@Date_Completed,@Username,@UserDate,@PO_Note);


   insert into task (PO_AutoID,PO_ID)
SELECT PO_AutoID,PO_ID
FROM po_table
WHERE PO_ID = @PO_ID
END

【问题讨论】:

  • 有SYSTEM_USER关键字。
  • 其实我想出了日期一。只需执行 SET @UserDate = GetDate()

标签: c# asp.net sql-server gridview


【解决方案1】:

试试这个。您想要 SUSER_SNAME() 或 SUSER_NAME()

SELECT 
USER_ID() as UserId, USER_NAME() as UserName, 
USER_SID() as UserSId, SUSER_SNAME() as SUserSName, 
SUSER_ID() as SUserId, SUSER_NAME() as SUserName, 
SUSER_SID() as SUserSId

SUSER_SNAME() 返回 DOMAIN\USER

我错过了问题的第二部分。

GETDATE() 将返回 SQL Server 的当前日期

【讨论】:

  • SUSER_SNAME 将返回您在数据库中登录的用户,USER_NAME() 将返回您在 sql server 中的第一个用户,User_Name(3) 将返回 4。
  • 谢谢。我有日期工作,但使用用户名....当我使用 formview 时,它会显示我的用户名,但是当我插入时,gridview 会显示 IIS APPPOOL 名称。
  • 它使用应用程序池的身份连接到服务器。将 添加到 web.config 时会发生什么?
  • 谢谢!它现在给了我正确的价值。在这个主题和线程上,为什么 GetDate() 只给我日期而不是时间?不应该两者兼而有之吗?我在上午 9:46 时收到“1/12/2015 12:00:00 AM”
  • 表中的列定义为什么? Getdate() 应该为您提供毫秒级的所有内容,即'2015-01-12 16:47:14.857'
猜你喜欢
  • 2010-12-07
  • 2022-08-11
  • 2021-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-06
  • 1970-01-01
  • 2011-09-19
相关资源
最近更新 更多