2013-08-30 28 views
0

我正在关注一个会话教程。问题是这部分。关于数据库选择查询困惑

OleDbCommand fecth = new OleDbCommand(
    "SELECT * FROM YONETICI Where YNAME'" + 
     txtad.Text + "' and YPASS'" + txtpass.Text + "' ", 
    con); 

在这部分我得到一个异常命名语法不正确-Missing运营商(我曾尝试翻译)

这是代码

OleDbConnection con = new OleDbConnection(
     "Provider=Microsoft.ACE.OLEDB.12.0;Data Source="+ 
     Server.MapPath("App_Data\\db.accdb")); 
    con.Open(); 



    OleDbCommand fecth = new OleDbCommand(
      "SELECT * FROM YONETICI Where YNAME'" + 
      txtad.Text + "' and YPASS'" + txtpass.Text + "' ", 
      con); 
    OleDbDataReader dr=fecth.ExecuteReader(); 
    if(dr.Read()){ 
    Session.Add("value",txtad.Text); 
    Response.Redirect("Default.aspx"); 
+3

你的代码很容易被sql注入。使用参数化查询。 –

回答

2

其余的你需要一个等于运算符。

OleDbCommand fecth = new OleDbCommand(
          "SELECT * FROM YONETICI Where YNAME = '" + 
          txtad.Text + 
          "' and YPASS = '" + 
          txtpass.Text + "' ", 
          con); 

试试看。我在查询中添加了两个等于运算符。

+5

当然他的txt.pass.text可能有一个等号,这意味着你的查询和他的查询都遭受了一些严重的漏洞。 – dcaswell

+0

我没有声称这是一个明智的查询开始。 =) – ryan1234

+2

@ ryan1234发布易受攻击的代码作为答案不利于社区或OP。 – MikeSmithDev

2

准确,你需要添加2等号,但我喜欢写查询以更好的方式 ,这一次将取代下面

fetch.Parameters.addWithValue() 


与像码值@Parameter
OleDbConnection con = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source="+Server.MapPath("App_Data\\db.accdb")); 
con.Open(); 

OleDbCommand fecth = new OleDbCommand("SELECT * FROM YONETICI Where YNAME='@txtad' and YPASS='@txtpass'", con); 

fecth.Parameters.AddWithValue("@txtad",txtad.Text); 
fecth.Parameters.AddWithValue("@txtpass",txtpass.Text); 
OleDbDataReader dr=fecth.ExecuteReader(); 
if(dr.Read()){ 
Session.Add("value",txtad.Text); 
Response.Redirect("Default.aspx"); 
+1

[你确定吗?](http://msdn.microsoft.com/zh-cn/ -us/library/system.data.oledb.oledbcommand.parameters.aspx) – MikeSmithDev

+0

当然,我一直在使用它 –

+1

从上面的链接可以看出:“OLE DB .NET Provider不支持将参数传递给SQL语句或由OleDbCommand在CommandType设置为Text时调用的存储过程。在这种情况下,必须使用问号(?)占位符。 – MikeSmithDev