2017-05-23 58 views
-1

正如標題所示,我試圖通過我的GUI更改數據庫中圖書的評分。例如,我將它從1更改爲5。當我使用斷點時,我發現查詢正確地轉換了它應該是的(我認爲)並且沒有錯誤。但它不會更改數據庫中的實際行。更新行返回1,但不會更改數據庫中的實際行

 public int ChangeRating(Book book, int rating, string title) 
    { 
     book.Query = "UPDATE Books SET Rating = " + rating + " WHERE Title = '" + title + "'"; 

     return SqlManager.RunNonQuery(book); 
    } 

之後,它進入我的SqlManager。

 public static int RunNonQuery<T>(T value) where T : IIsQueriable, new() 
    { 
     using (SqlConnection con = new SqlConnection(cs)) //connectie wordt aangemaakt 
     { 
      using (SqlCommand cmd = con.CreateCommand()) //maakt een command aan 
      { 
       cmd.CommandText = value.Query; //de waarde van Query wordt de command 
       return TryExecuteNonQuery<T>(cmd); 
      } 
     } 
    } 

    private static int TryExecuteNonQuery<T>(SqlCommand cmd) where T : IIsQueriable, new() 
    { 
     int result; 

     try 
     { 
      cmd.Connection.Open(); 
      cmd.Prepare(); 
      result = cmd.ExecuteNonQuery(); 
     } 
     catch (Exception e) 
     { 
      MessageBox.Show(e.Message); 
      throw; 
     } 
     finally 
     { 
      cmd.Connection.Close(); 
     } 
     MessageBox.Show(result.ToString()); 
     return result; 
    } 

在數據庫中。評級是一個int,標題是一個Nvarchar(MAX)事件。

+0

,提供您的樣品數據。 – Mansoor

+1

您是否100%確定您的連接字符串(代碼中的'cs')指向正確的數據庫? – Jcl

+1

此代碼高度暴露於Sql注入。特別是,我建議你不要構建自己的不支持參數化查詢的數據庫框架。 – Steve

回答

0

相反,它使用的是在WHERE子句如果等於號像操作者使用這樣的

book.Query = "UPDATE Books SET Rating = " + rating + " WHERE Title like %'" + title + "'%"; 

或數據庫檢查該值。 我認爲這會對你有所幫助。

+0

sql bit工作。我知道那很多 – Chaoss1848

0

ExecuteNonQuery()命令的返回值1不意味着1行已被更改,但一行觸發了該命令。如果您的數據庫用戶只具有讀取權限,則該命令將在一行中觸發,但不會執行。所以請確保您的數據庫用戶擁有寫權限。

+0

我有寫permisisons – Chaoss1848

相關問題