我正在开发一个没有实体框架的小型ASP MVC项目。
为了在欢迎附近的页面中显示已记录用户的名称(示例"欢迎John")我想检索属性的值" Email"从表格"客户"并将其存储在List"结果"然后将此列表的每个电子邮件与X(这是已记录的电子邮件)进行比较。
如果相等,我会检索相应的" LastName"到这个电子邮件并存储在变量y中。
在最后,我将y分配给Session的值。但我总是遇到这个错误:
ExecuteReader:尚未初始化连接属性
我很抱歉编码的质量,请考虑我是初学者。
这是我尝试过的:
控制器:中的
private void connection()
{
string constring = ConfigurationManager.ConnectionStrings["DeliveryCon"].ToString();
con = new SqlConnection(constring);
}
public ActionResult Login()
{
return View();
}
database_Access_layer.db dblayer = new database_Access_layer.db();
[HttpPost]
public ActionResult Login(FormCollection fc, string LastName, string Email)
{
int res = dblayer.Admin_Login(fc["Email"], fc["Password"]);
if (res == 1)
{
Session["currentUser"] = Email;
string z = Email;
connection();
con.Open();
SqlCommand command = new SqlCommand("select Email from Client", con);
List<string> result = new List<string>();
using (var reader = command.ExecuteReader())
{
while (reader.Read())
result.Add(reader.GetString(0));
}
foreach (string x in result)
{
if (x == z)
{
SqlCommand command2 = new SqlCommand("select LastName from Client WHERE Email= @x ", con);
//con.Open();
SqlParameter param = new SqlParameter( "@x", SqlDbType.NVarChar, 16);
param.Value = Session["currentUser"];
command2.Parameters.Add(param);
//con.Open();
string y = command2.ExecuteScalar().ToString();
con.Close();
Session["currentUser"] = y;
}
}
return RedirectToAction("Create", "Client");
Session.RemoveAll();
}
else {
TempData["msg"] = " Email or Password is wrong !";
return RedirectToAction("Index", "Home");
}
}
在我的视图Create.cshtml:
中<h4>Welcome @if (Session["currentUser"] != null)
{ <h4> @Session["currentUser"].ToString()</h4>}</h4>
答案 0 :(得分:0)
您尚未调用Connection()函数来初始化连接,还需要添加conn.Open()以打开与数据库的连接。
答案 1 :(得分:0)
您需要调用私有方法连接 然后才能在执行阅读器中使用它。
if (res == 1)
{
connection();
您也没有使用
关闭连接con.Close();
你最好这样做:
using(SqlConnection con = new SQLConnection(ConfigurationManager.ConnectionStrings["DeliveryCon"].ToString())
{
// other statements
SqlCommand command2 = new SqlCommand("select LastName from Client WHERE Email= @x ", con);
SqlParameter param = new SqlParameter(
"@x", SqlDbType.NVarChar, 16);
param.Value = Session["currentUser"];
command2.Parameters.Add(param);
con.Open();
string y = command2.ExecuteScalar().ToString();
con.Close();
Session["currentUser"] = y;
}