【问题标题】:Can't open SqlConnection to database无法打开 SqlConnection 到数据库
【发布时间】:2014-07-13 21:18:07
【问题描述】:

我是 asp.net 的新手,我正在尝试制作一个简单的登录页面,该页面将搜索在数据库中输入的用户名和密码。我创建了App_Data 文件夹,其中有一个名为Database1.mdf 的数据库。在该数据库中有一个名为users 的表。

这是登录页面背后的代码:

protected void Page_Load(object sender, EventArgs e)
{
    if (IsPostBack)
    {
        string mcn = Request.Form["username"];
        string pass = Request.Form["pass"];
        string query = "SELECT * FROM users WHERE mcn = '" + mcn + "' AND pass = '" + pass + "'";
        string connectionstring = @"Data Source=(LocalDB)\v11.0;AttachDbFilename=App_Data\Database1.mdf;Integrated Security=True";

        SqlConnection con = new SqlConnection(connectionstring);
        SqlDataAdapter ad = new SqlDataAdapter(query, con);
        con.Open();
        SqlCommand com = new SqlCommand(query, con);
        SqlDataReader data = com.ExecuteReader();
        bool found;
        found = (bool)data.Read();
        con.Close();

        if (found)
        {
            Session["user"] = true; 
        }

        Response.Redirect("Main.aspx");
    }
 }

当我运行页面并提交调用此Page_Load 的登录表单时,我收到此错误:

“System.Data.SqlClient.SqlException”类型的异常发生在 System.Data.dll 但未在用户代码中处理

附加信息:尝试附加自动命名的数据库 文件 App_Data\Database1.mdf 失败。同名数据库 存在,或指定的文件无法打开,或位于 UNC 分享。

提前致谢!

【问题讨论】:

  • 此查询对 Sql Injection 攻击开放。 请对其进行参数化。此外,您应该处理您的物品。我看到你打电话给con.Close(),但大部分都支持处理。将 SqlConnectionSqlDataAdapterSqlCommandSqlDataReader 包装在 using 语句中。
  • 另外,您是否有理由反对使用更稳定的框架,例如 ASP Identity?与可能将您带到这里的 Button_Click 事件相比,当 PostBack 发生时您在 Page_Load 中执行此操作是否有原因?这将导致页面上的任何按钮尝试登录,这可能会使所有人感到困惑。
  • 我认为您可以使用AttachDbFilename=|DataDirectory|\Module.mdf 修复您的连接字符串,但是@MatthewHaugen 所说的一切都是绝对正确的,需要尽快修复(并将条件恢复为!IsPostBack
  • @Steve 感谢您的评论。我将 attachdbfilename 更改为 |DataDirectory|\database1.mdf 但现在我收到此错误:System.Data.dll 中出现“System.Data.SqlClient.SqlException”类型的异常,但未在用户代码中处理信息:关键字“表”附近的语法不正确。
  • 您的 SELECT 语句中的 users 是什么?你说你有一张桌子叫Tableusers 是存储过程吗?如果是这样,那可能就是您的语法不正确。

标签: c# asp.net sql-server sql-server-2012-express


【解决方案1】:

好吧,我终于通过将所有内容移到不同的类来解决它。这使得一切都井井有条,我认为作为初学者很难查看它并发现可能是语法错误。

感谢cmets!

【讨论】:

    猜你喜欢
    • 2015-09-11
    • 2011-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-05
    相关资源
    最近更新 更多