如何在不使用EF

时间:2017-09-26 08:16:39

标签: c# sql sql-server asp.net-mvc

我正在开发一个没有实体框架的小型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>

2 个答案:

答案 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;
}