2014-11-08 53 views
0

我連接了一個.MDF數據庫文件到C#(Visual Studio)中的aspx文件,但是當我試圖執行查詢時,它不起作用。在asp.net中連接的SQL Server數據庫文件,但查詢未執行

下面給出了問題出現的代碼。請幫助我。

com.ExecuteNonQuery()返回-1,我想它應該在的情況下返回成功執行

SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\karunya\Documents\Visual Studio 2010\Projects\Login\Login\App_Data\MyDB.mdf;Integrated Security=True;User Instance=True"); 

con.Open(); 
string sql = "SELECT * FROM Data WHERE user = '"+user.Text+"' "; 
SqlCommand com = new SqlCommand(sql, con); 
int tmp = Convert.ToInt32(com.ExecuteNonQuery()); 

con.Close(); 

if (tmp == 1) 
{ 
    con.Open(); 
    sql = "SELECT pass FROM LogTable WHERE user = '" + user.Text + "'"; 
    SqlCommand com1 = new SqlCommand(sql, con); 
    string password = com1.ExecuteScalar().ToString(); 

    if (password == pass.Text) 
    { 
     Response.Write("Access Granted!"); 
    } 
    else 
    { 
     Response.Write("Access Denied!"); 
    } 
} 
else 
{ 
    Response.Write("User Name Incorrect!"); 
} 
+2

'ExecuteNonQuery()'返回**受到DELETE,INSERT或UPDATE操作影響的**行數。既然你沒有這樣做,那麼它總是返回-1 - 這是** NOT **錯誤條件! [這是**所有**很好,並在MSDN上廣泛記錄!](http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executenonquery%28v=vs.110%29 .aspx) - 你只需要**去尋找它!** – 2014-11-08 08:54:52

+0

除了@ marc_s的評論,受影響的行的數量嚴格依賴於使用的遊標類型 – Alireza 2014-11-08 08:59:06

+0

@Arun:我會建議你使用executablecalar if你正在檢查單個記錄。並通過您的選擇查詢,似乎你正在檢查用戶是否存在。我對嗎?如果你是請不要在select語句中使用*。 – 2014-11-08 09:30:36

回答

0

你想做什麼的1?

它總是返回-1,因爲你選擇的表

做..

DataTable dt = new DataTable(); 
     using (var conn = new SqlConnection(connectionLib)) 
     { 
      try 
      { 
       using (var cmd = new SqlCommand(Query, conn)) 
       { 

        SqlDataAdapter da = new SqlDataAdapter(cmd); 
        da.Fill(dt); 
        conn.Close(); 
        da.Dispose(); 
       } 
      } 
      catch 
      { 
      } 
     } 

現在檢查根據你的條件,如果你想檢查沒有行的再檢查

dt.rows.cout 
+0

這不提供問題的答案。要批評或要求作者澄清,請在其帖子下方留言。 – khelwood 2014-11-08 08:57:38

+0

好的我有更新 – 2014-11-08 09:04:22

0

而不是依靠ExecuteNonQuery的返回值,在查詢中使用COUNT(*)並返回計數使用ExecuteScalar

而且總是(ALWAYS)使用參數化查詢:

string sql = "SELECT COUNT(*) FROM Data WHERE user = @user"; 
SqlCommand com = new SqlCommand(sql, con); 
com.Parameters.AddWithValue("@user", user.Text); 
int tmp = Convert.ToInt32(com.ExecuteScalar()); 

和呼叫轉移到Close()對方法的最後

0

請嘗試檢查連接字符串,它的確定再試試這個代碼

,你就會知道,如果選擇hjas行或不超過做你想做的事

 con.Open(); 
          cmd.Connection = con; 
          cmd.CommandText = "select * from user where [email protected] and [email protected]"; 
          cmd.Parameters.Add(new SqlParameter("@login", SqlDbType.VarChar, 255)).Value = txtpsedu.Text; 
          cmd.Parameters.Add(new SqlParameter("@psw", SqlDbType.VarChar, 255)).Value = txtlogin.Text; 

    dr = cmd.ExecuteReader(); 

        if (dr.Read()) 
        { 

        //// do what you want here 

        } 

        else 
        { 

         Response.Write("User Name Incorrect!"); 

        } 
        dr.Close(); 
        con.Close(); 
什麼3210

我希望嘗試一下

相關問題