【发布时间】: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(),但大部分都支持处理。将SqlConnection、SqlDataAdapter、SqlCommand和SqlDataReader包装在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是什么?你说你有一张桌子叫Table。users是存储过程吗?如果是这样,那可能就是您的语法不正确。
标签: c# asp.net sql-server sql-server-2012-express