如何在没有EF的情况下在ASP MVC中创建登录/注册页面

时间:2017-08-29 14:14:33

标签: c# sql asp.net-mvc

我正在尝试在没有EF的情况下在ASP MVC中创建一个寄存器和登录页面。

我写了这个解决方案,但我总是收到错误" connection"和"命令"在当前上下文中不存在:

public ActionResult Login(Client cmodel)

    public string GetPassword(string email)
    {
        using (connection = new SqlConnection(ConfigurationManager.AppSettings["deliverycon"]))
        {
            using (command = new SqlCommand(@"select top 1 password from clients where email=@email", connection))
            {
                connection.Open();
                command.Parameters.AddWithValue("@email", email);
                using (reader = command.ExecuteReader())
                {
                    reader.Read();
                    return reader["password"].ToString;
                }
            }
        }
    }

1 个答案:

答案 0 :(得分:2)

在C#中,必须在分配变量之前声明变量,即使在using语句中也是如此。你基本上完成了相同的工作:

myValue = 10;

编译器会抱怨当前上下文中不存在myValue。解决方案是声明变量然后分配它,你可以用一行代码来完成:

int myValue = 10;

您实际上从未为connectioncommandreader声明变量。您需要将它们声明为SqlConnectionSqlCommand以及SqlDataReader,或者您可以use the implicit var

此示例显示了两种类型:

public string GetPassword(string email)
{
    using (SqlConnection connection = new SqlConnection(ConfigurationManager.AppSettings["deliverycon"]))
    {
        using (var command = new SqlCommand(@"select top 1 password from clients where email=@email", connection))
        {
            connection.Open();
            command.Parameters.AddWithValue("@email", email);

            using (var reader = command.ExecuteReader())
            {
                reader.Read();
                return reader["password"].ToString;
            }
        }
    }
}

var经常在上下文中清楚显示类型时使用,而明确表示在不清楚时常使用该类型。

此外,您似乎将密码以明文形式存储在数据库中。这是一个糟糕的主意。密码应该是单向散列和盐渍的。如果您不知道自己在做什么,那么推出自己的安全系统并不是一个好主意。