2013-09-28 144 views
1

好的,我的數據庫沒有更新,最近幾天我一直有問題。我可以讀取數據,我也沒有收到任何例外。我試圖更新數據庫,然後嘗試在更新後(在同一次運行期間)再次讀取值,並且它們仍保留原始值,所以它似乎不是數據庫被複制到另一個文件夾時的問題(我使用複製如果更新,但沒有數據庫正在更新)。C#和SQLCE數據庫沒有更新

這是我正在使用的代碼。正如你所看到的,我嘗試了幾種不同的方法,其中沒有一個能夠工作。

public void UpdateDatabaseInStock(string itemName, string tableName) 
    { 
     DataSet data = new DataSet("Items"); 
     int val; 
     //get the file path to the database as a string 
     string dbfile = 
      new System.IO.FileInfo(System.Reflection.Assembly.GetExecutingAssembly().Location).DirectoryName + 
      "\\Database\\GameData.sdf"; 
     //connect to the database 
     using (SqlCeConnection cntn = new SqlCeConnection("datasource=" + dbfile)) 
     { 
      //create an adapter to pull all data from the table 
      using (SqlCeDataAdapter adpt = new SqlCeDataAdapter 
       ("SELECT * FROM " + tableName + " WHERE Name LIKE '%" + itemName + "%'", cntn)) 
      { 
       //put the data into a DataSet 
       adpt.Fill(data); 

       cntn.Close(); 
      } 



      //fill the data from the Items table into a DataTable to return. 
      DataTable itemTable = data.Tables[0]; 

      DataRow a = itemTable.Rows[0]; 

      val = (short)a.ItemArray[3] - 1; 

      dbfile = ""; 
      data.Dispose(); 
      itemTable.Dispose(); 


      SqlCeCommand cmd = new SqlCeCommand(); 
      cmd.Connection = cntn; 
      cntn.Open(); 

      cmd.CommandType = CommandType.Text; 

      cmd.CommandText = "UPDATE " + tableName + " SET [In Stock] = @Value WHERE [Name] = '@ItemName'"; 
      //cmd.Parameters.Add("@Value", SqlDbType.SmallInt); 
      //cmd.Parameters["@Value"].Value = val; 
      //cmd.Parameters.Add("@ItemName", SqlDbType.NChar, 75); 
      //cmd.Parameters["@ItemName"].Value = itemName; 

      cmd.Parameters.AddWithValue("@Value", val); 
      cmd.Parameters.AddWithValue("@ItemName", itemName); 


      cmd.ExecuteNonQuery();  
      //close the conenction 
      cntn.Close(); 
      cmd.Dispose(); 
     } 
    } 

任何想法讓它實際更新?

+0

您是否嘗試過在數據庫中檢查更新是否進行? –

+0

似乎根本沒有進行。每次我查看實際數據庫中的值或者使用代碼將它們拉入時,它們都具有相同的起始值。 –

+1

什麼樣的數據類型是你的名字列,你傳遞了一個確切的'itemName'?你的where子句在你的'select'和你的'update'之間有所不同,這不一定是壞的,但是你可能比'[Name] ='@'LIKE'%「+ itemName +」%'「 ItemName''。 – cmcquillan

回答

1

只是預感(無法在msdn上證實這一點):是否可以使用nchar(75)爲參數添加空格,從而導致WHERE子句失敗?

+0

好的,你可能已經開始了某些事情,我不完全知道它是否出於你陳述的原因,但是where子句失敗了,它似乎並不知道以正確處理字符串,所以我將ID列(一個數字)取而代之,並在where子句中使用它,它完美地工作,所以謝謝! –