如何在MVC5中用ADO.NET将当前登录用户名插入SQL表
获取当前Windows登录用户并插入SQL表
要自动获取当前Windows登录用户并插入到MSSQL的username列,需根据你的ASP.NET版本选择对应实现,以下是具体方案:
前提条件
确保项目已启用Windows身份验证:
- ASP.NET Core:在
launchSettings.json中设置windowsAuthentication: true、anonymousAuthentication: false,并在Program.cs中添加builder.Services.AddAuthentication(IISDefaults.AuthenticationScheme); - ASP.NET Framework:在Web.config中启用Windows身份验证,禁用匿名访问
代码实现
1. 获取当前用户
Windows身份验证下,用户身份信息通过User.Identity.Name获取(格式为域名\用户名,例如DOMAIN\jdoe)。若只需纯用户名部分,可拆分字符串提取。
2. 插入SQL参数
替换你原有的代码片段:
ASP.NET Core(Razor页面/控制器)
// 获取完整登录名,拆分出纯用户名 var fullUserName = User.Identity.Name; var userName = fullUserName?.Split('\\').Last() ?? string.Empty; // 推荐指定参数类型,避免AddWithValue的潜在问题 cmd.Parameters.Add(new SqlParameter("@SUserName", SqlDbType.NVarChar, 50) { Value = userName });
ASP.NET Framework
var fullUserName = HttpContext.Current.User.Identity.Name; var userName = fullUserName?.Split('\\').Last() ?? string.Empty; cmd.Parameters.Add(new SqlParameter("@SUserName", SqlDbType.NVarChar, 50) { Value = userName });
注意事项
- 若
User.Identity.Name为空,检查Windows身份验证是否正确启用,以及应用池是否配置为允许Windows身份验证 - 避免直接使用
AddWithValue,它可能导致SQL Server参数类型推断错误,引发性能问题或异常 - 处理
null情况,避免空引用异常,确保即使获取不到用户信息也能正常执行插入(可默认空字符串或其他占位符)
内容的提问来源于stack exchange,提问作者smbbb
相关产品推荐
相关产品推荐

