C# 通过SQL表进行用户身份验证

C# 通过SQL表进行用户身份验证,c#,sql,visual-studio-2012,C#,Sql,Visual Studio 2012,我正在尝试在我的应用程序中实现一些安全性。我有一个名为USER_AUTHORIZATION的表,其中包含将使用该应用程序的用户的有效单点登录ID的列表。格式为COMPANYNAME\111222333,存储在名为UNAME的字段中。我试图在访问应用程序时执行检查,查看当前登录的用户是否在valid users表中。如果他们的SSO不在表中,我想显示一条错误消息 看法 当前在“=”附近接收到错误语法。 指向行int count=intCommand223.ExecuteScalar 更新2:我已经

我正在尝试在我的应用程序中实现一些安全性。我有一个名为USER_AUTHORIZATION的表,其中包含将使用该应用程序的用户的有效单点登录ID的列表。格式为COMPANYNAME\111222333,存储在名为UNAME的字段中。我试图在访问应用程序时执行检查,查看当前登录的用户是否在valid users表中。如果他们的SSO不在表中,我想显示一条错误消息

看法

当前在“=”附近接收到错误语法。 指向行int count=intCommand223.ExecuteScalar

更新2:我已经玩弄了我的代码,但无论我做什么,建议的解决方案 int count=intCommand223.ExecuteScalar; 似乎不起作用。下面是我更新的控制器代码

 public ActionResult HolidayDateTable()
    {
        var whoareyoupeople = User.Identity.Name;
        DateTime date = DateTime.Now;
        string myerrorstring = "User " + whoareyoupeople + " attempted unauthorized access on " + date + ".";
        string query = "SELECT COUNT(*) FROM USER_AUTHORIZATION WHERE UNAME == " + whoareyoupeople + ")";
        SqlConnection conn = new SqlConnection("Data Source=SWDB10DSQL;Initial Catalog=BillingUI;Integrated Security=True;MultipleActiveResultSets=True;Application Name=EntityFramework");
        conn.Open();
        SqlCommand cmd = conn.CreateCommand();
        {
            cmd.CommandText = string.Format("SELECT COUNT(*) FROM USER_AUTHORIZATION WHERE UNAME == " + whoareyoupeople + ")");
            int count = (int)cmd.ExecuteScalar();

            if (count == 0)
            {
                return RedirectToAction("AccessDenied");
            }
            else
            {
                return View(db.HOLIDAY_DATE_TABLE);
            }
        }
        }          
更新3:问题在于我的查询字符串,而不是C代码。我必须去掉一个等号。现在我遇到的问题是

Incorrect syntax near '\601011308'.
指向int count=intcmd.ExecuteScalar

这是表UNAME字段中值的部分条目。它缺少前面的公司名称,即;公司名称\601011308。我认为count应该返回SSO与数据库的匹配量,即;如果登录用户SSO为601011308,并且该用户是存储在表中的应用程序的有效用户,则count应返回1

更新3中出现上述问题的最新控制器代码:

 public ActionResult HolidayDateTable()
    {
        var whoareyoupeople = User.Identity.Name;
        DateTime date = DateTime.Now;
        string myerrorstring = "User " + whoareyoupeople + " attempted unauthorized access on " + date + ".";
        SqlConnection conn = new SqlConnection("Data Source=SWDB10DSQL;Initial Catalog=BillingUI;Integrated Security=True;MultipleActiveResultSets=True;Application Name=EntityFramework");
        conn.Open();
        SqlCommand cmd = conn.CreateCommand();
        {
            cmd.CommandText = string.Format("SELECT COUNT(*) FROM AUTHORIZED_USERS WHERE UNAME = " + whoareyoupeople + ")");
            int count = (int)cmd.ExecuteScalar();

            if (count == 0)
            {
                return RedirectToAction("AccessDenied");
            }
            else
            {
                return View(db.HOLIDAY_DATE_TABLE);
            }
        }
        }            
使用ExecuteScalar代替ExecuteOnQuery,因为Count自然会返回一个整数


int count=intcmd.ExecuteScalar;实际上是我昨天刚刚实现的。然后在else/if语句中使用count。

不要从视图调用数据库,而是在控制器中调用。视图中不应该有复杂的逻辑。是否使用ASP.NET MVC?如果是这样,那么这个逻辑就不属于你的观点。它属于控制器,也可能属于动作过滤器。你想从头开始构建它,而不是依赖内置的东西吗?为什么要使用u连接?
Incorrect syntax near '\601011308'.
 public ActionResult HolidayDateTable()
    {
        var whoareyoupeople = User.Identity.Name;
        DateTime date = DateTime.Now;
        string myerrorstring = "User " + whoareyoupeople + " attempted unauthorized access on " + date + ".";
        SqlConnection conn = new SqlConnection("Data Source=SWDB10DSQL;Initial Catalog=BillingUI;Integrated Security=True;MultipleActiveResultSets=True;Application Name=EntityFramework");
        conn.Open();
        SqlCommand cmd = conn.CreateCommand();
        {
            cmd.CommandText = string.Format("SELECT COUNT(*) FROM AUTHORIZED_USERS WHERE UNAME = " + whoareyoupeople + ")");
            int count = (int)cmd.ExecuteScalar();

            if (count == 0)
            {
                return RedirectToAction("AccessDenied");
            }
            else
            {
                return View(db.HOLIDAY_DATE_TABLE);
            }
        }
        }