Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 检查数据库中是否存在该用户?_C#_Asp.net - Fatal编程技术网

C# 检查数据库中是否存在该用户?

C# 检查数据库中是否存在该用户?,c#,asp.net,C#,Asp.net,我开发了一个基于内联网的应用程序,它运行良好。本系统仅适用于我公司的一个部门。来自该部门以外的任何用户在尝试浏览系统时都会收到一个错误页面。系统将通过将用户的网络id传递到Active Directory来检查用户信息,并从那里获取用户信息。为此,我创建了一个名为Security的类。 然后我在母版页中添加以下内容: if (Security.isMember(netID)) { ................ } els

我开发了一个基于内联网的应用程序,它运行良好。本系统仅适用于我公司的一个部门。来自该部门以外的任何用户在尝试浏览系统时都会收到一个错误页面。系统将通过将用户的网络id传递到Active Directory来检查用户信息,并从那里获取用户信息。为此,我创建了一个名为Security的类。 然后我在母版页中添加以下内容:

if (Security.isMember(netID))
        {
            ................
        }
        else
            Response.Redirect("Error.aspx");
代码隐藏:

由于用户第一次浏览网站后将被添加到数据库中,因此我想修改安全类中先前的方法,以检查该用户是否存在于数据库中。如果不是,系统应使用安全类检查用户是否属于该部门。我不知道谁应该在前面的方法中放一个代码来检查数据库中是否存在用户。你能帮我一下吗

用于检查数据库中是否存在用户的初始代码:

if (!String.IsNullOrEmpty(userid))
        {
            string username = userid;
            string connString = "Data Source=localhost\\sqlexpress;Initial Catalog=Test;Integrated Security=True";
            string cmdText2 = "SELECT Count(*) FROM employee WHERE Username = '" + username + "'";
            using (SqlConnection conn = new SqlConnection(connString))
            {
                conn.Open();
                // Open DB connection.
                using (SqlCommand cmd = new SqlCommand(cmdText2, conn))
                {
                    cmd.ExecuteScalar();
                }
            }
        }
我在安全类中通过方法修改如下:

public static bool isMember(string userid)
    {
        if (!String.IsNullOrEmpty(userid))
        {
            string username = userid;
            string connString = "Data Source=localhost\\sqlexpress;Initial Catalog=Test;Integrated Security=True";
            string cmdText2 = "SELECT Count(*) FROM employee WHERE Username = '" + username + "'";
            using (SqlConnection conn = new SqlConnection(connString))
            {
                conn.Open();
                // Open DB connection.
                using (SqlCommand cmd = new SqlCommand(cmdText2, conn))
                {
                    cmd.ExecuteScalar();
                }
            }

            return true;
        }
        else if (Org.Code == code) 
            return true;
        else
            return false;
    }

但通过这样做,系统向所有人开放,即使他们不在部门内那么如何解决这个问题呢?

您必须检查执行命令的结果:

var count = (int) cmd.ExecuteScalar();
return count == 1; // return true if there's only one employee with given name
还可以防止SQL注入攻击和修改

string cmdText2 = "SELECT Count(*) FROM employee WHERE Username = '" + username + "'";

并在代码中设置参数值

cmd.Parameters.Add("@UserName", SqlDbType.VarChar);
cmd.Parameters["@UserName"].Value = userName;

您必须检查已执行命令的结果:

var count = (int) cmd.ExecuteScalar();
return count == 1; // return true if there's only one employee with given name
还可以防止SQL注入攻击和修改

string cmdText2 = "SELECT Count(*) FROM employee WHERE Username = '" + username + "'";

并在代码中设置参数值

cmd.Parameters.Add("@UserName", SqlDbType.VarChar);
cmd.Parameters["@UserName"].Value = userName;

非常感谢你的帮助。我真的很感激。另外,你能看看我的更新代码吗?因为我遵循了你告诉我的,现在我面临着一些问题。
userId
参数的值是多少?它是一个8个字符的字符串,代表用户的网络id。我相信你必须调试代码-使用
debug.WriteLine
输出信息。。。否则我帮不了你。非常感谢你的帮助。我真的很感激。另外,你能看看我的更新代码吗?因为我遵循了你告诉我的,现在我面临着一些问题。
userId
参数的值是多少?它是一个8个字符的字符串,代表用户的网络id。我相信你必须调试代码-使用
debug.WriteLine
输出信息。。。否则我帮不了你。如果它正在执行
else if
,你将userid作为空字符串传递。如果它正在执行
else if
,你将userid作为空字符串传递。