我正在尝试在没有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;
}
}
}
}
答案 0 :(得分:2)
在C#中,必须在分配变量之前声明变量,即使在using
语句中也是如此。你基本上完成了相同的工作:
myValue = 10;
编译器会抱怨当前上下文中不存在myValue
。解决方案是声明变量然后分配它,你可以用一行代码来完成:
int myValue = 10;
您实际上从未为connection
或command
或reader
声明变量。您需要将它们声明为SqlConnection
和SqlCommand
以及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
经常在上下文中清楚显示类型时使用,而明确表示在不清楚时常使用该类型。
此外,您似乎将密码以明文形式存储在数据库中。这是一个糟糕的主意。密码应该是单向散列和盐渍的。如果您不知道自己在做什么,那么推出自己的安全系统并不是一个好主意。