黑马程序员技术交流社区

标题: 参数化查询疑问 [打印本页]

作者: 林嘉健    时间: 2013-1-12 19:43
标题: 参数化查询疑问
本帖最后由 林嘉健 于 2013-1-12 21:30 编辑
  1. using (SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database.mdf;
  2. Integrated Security=True;User Instance=True"))
  3.         {
  4.             conn.Open();
  5.             using (SqlCommand cmd = conn.CreateCommand())
  6.             {
  7.                 cmd.CommandText = "select * from t_User where Username = @username and Password = @userpassword";
  8.                 cmd.Parameters.Add(new SqlParameter("username", strName));
  9.                 cmd.Parameters.Add(new SqlParameter("userpassword", strPwd));
  10.                 DataSet dataset = new DataSet();
  11.                 SqlDataAdapter ada = new SqlDataAdapter(cmd);
  12.                 ada.Fill(dataset);
  13.                 DataTable table = dataset.Tables[0];
  14.                 for (int i = 0; i < table.Rows.Count; i++)
  15.                 {
  16.                     DataRow row = table.Rows[i];
  17.                     string dbpassword = Convert.ToString(row["userpassword"]);
  18.                     if (dbpassword == strPwd)
  19.                     {

  20.                         Response.Write("<script>alert('登录成功')</script>");
  21.                         Session["pageusername"] = strName;
  22.                         Session["pageuserpassword"] = strPwd;
  23.                         Server.Transfer("buy.aspx");

  24.                     }

  25.                     //string dbpassword = Convert.ToString(row["userpassword"]);
  26.                     Response.Write(dbpassword);
  27.                 }
  28.             }
  29.         }
复制代码
用到的是参数化查询,代码也是跟着视频敲的。各种无奈

Petshop.jpg (45.23 KB, 下载次数: 36)

Petshop.jpg

作者: 王继光    时间: 2013-1-12 19:55
                cmd.Parameters.Add(new SqlParameter("username", strName));

                cmd.Parameters.Add(new SqlParameter("userpassword", strPwd));

上面两句话 有问题吧, 第一 @ 符号不要省。。 第二, strName  strPwd 是字符串吗?? 还是 控件名??
作者: 林嘉健    时间: 2013-1-12 20:07
本帖最后由 林嘉健 于 2013-1-12 20:13 编辑
王继光 发表于 2013-1-12 19:55
cmd.Parameters.Add(new SqlParameter("username", strName));

                cmd.Para ...


字符串呢 我忘记复制上面的代码了。。

  1. <BLOCKQUOTE>
复制代码
  1. protected void Button1_Click(object sender, EventArgs e)
  2. {
  3. //传递form表单里各节点的数据并获得(post方式)
  4. string strName = Request.Form["txtName"];
  5. string strPwd = Request.Form["txtPwd"];
  6. object objectName = null;
  7. if (strName.Length <= 0)
  8. {
  9. objectName = DBNull.Value;
  10. }
  11. else
  12. {
  13. objectName = strName;
  14. }
  15. object objectPwd = null;
  16. if (strPwd.Length <= 0)
  17. {
  18. objectPwd = DBNull.Value;
  19. }
  20. else
  21. {
  22. objectPwd = strPwd;
  23. }

  24. using (SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database.mdf;
  25. Integrated Security=True;User Instance=True"))
  26. {
  27. conn.Open();
  28. using (SqlCommand cmd = conn.CreateCommand())
  29. {
  30. cmd.CommandText = "select * from t_User where Username = @username and Password = @userpassword";
  31. cmd.Parameters.Add(new SqlParameter("@username", strName));
  32. cmd.Parameters.Add(new SqlParameter("@userpassword", strPwd));
  33. DataSet dataset = new DataSet();
  34. SqlDataAdapter ada = new SqlDataAdapter(cmd);
  35. ada.Fill(dataset);
  36. DataTable table = dataset.Tables[0];
  37. for (int i = 0; i < table.Rows.Count; i++)
  38. {
  39. DataRow row = table.Rows[i];
  40. string dbpassword = Convert.ToString(row["userpassword"]);
  41. if (dbpassword == strPwd)
  42. {

  43. Response.Write("<script>alert('登录成功')</script>");
  44. Session["pageusername"] = strName;
  45. Session["pageuserpassword"] = strPwd;
  46. Server.Transfer("buy.aspx");

  47. }

  48. //string dbpassword = Convert.ToString(row["userpassword"]);
  49. Response.Write(dbpassword);
  50. }
  51. }
  52. }
  53. }
复制代码

作者: 王继光    时间: 2013-1-12 20:18
你把解决方案 打包给我看一下。
作者: 林其荣    时间: 2013-1-12 20:21
或许是你表单传过来的值为空值,而在参数化查询里,如果值为null,则表示“没有提供参数的值”。

这样是会报错的!

你可以判断一下是否为空,如果为空,则把DBNull赋值给你所要传进去的变量。注意DBNull和你要传进去的变量的数据类型!
作者: 林嘉健    时间: 2013-1-12 21:30
搞了个断点,post表单传过来的是空值。

我就郁闷了 为什么会是空值呢。

原来我把代码写在了 Page_load里了- -
作者: 郝滨    时间: 2013-1-12 21:33
{:soso_e134:}看了十分钟呀 囧 不是很明白  难道是SQL的连接问题?
作者: 林嘉健    时间: 2013-1-12 21:34
王继光 发表于 2013-1-12 19:55
cmd.Parameters.Add(new SqlParameter("username", strName));

                cmd.Para ...

学长能解释一下为什么要+@吗? 我看杨老师的视频有时候是+, 有时候是不加的。

我这边试了一下 +@ 和 不+@ 都能编译通过哦,并且功能可以实现。
作者: 林嘉健    时间: 2013-1-12 21:39
郝滨 发表于 2013-1-12 21:33
看了十分钟呀 囧 不是很明白  难道是SQL的连接问题?

打算进第6期.NET黑马吗?
作者: ykrh    时间: 2013-1-14 23:00
打断点调试一下就出来了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2