2013-08-30 52 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