2013-03-25 82 views
1

在我開始之前,我會告訴你,在我考慮發佈一個問題之前,我已經嘗試過在以前的問題和其他網站上已經提出的一切。碰巧,似乎沒有任何工作,我只是厭倦了這一點。INSERT INTO命令不起作用

作爲一些背景信息,這是爲我的計算A2項目,所以我現在有點時間 - 即我不能改變我的代碼加載理想。

無論如何,在這個問題上... 我在我的代碼中使用SQLCe從各種表讀取並寫入一個。到目前爲止,從表中讀取的代碼工作正常,所以這是任何連接問題首先。我正在努力的代碼如下:

 string connectionString = Properties.Settings.Default.BookingSystemDatabaseConnectionString; 
     using (SqlCeConnection myConnection = new SqlCeConnection(connectionString)) 
     { 
      myConnection.Open(); 
      try 
      { 
       string commandStr = "INSERT INTO bookings(username, room, time) VALUES(@username, @room, @time)"; 
       SqlCeCommand myCommand = new SqlCeCommand(commandStr); 
       //Passes parameters into SQL command. 
       myCommand.Parameters.AddWithValue("username", StaticUser.StudentUser.username); 
       myCommand.Parameters.AddWithValue("room", roomBox.Text); 
       myCommand.Parameters.AddWithValue("time", timeBox.Text); 
       //Executes SQL command. Returns the number of affected rows (unecessary for my purposes; a bi-product if you will). 
       myCommand.ExecuteNonQuery(); 
      } 
      catch 
      { 
       System.Windows.Forms.MessageBox.Show("Could not write new booking to database. This is likely because the database cannot be reached.", "Error"); 
       Program.AccessError = true; 
      } 
      myConnection.Close(); 
     } 

這只是我試圖解決我遇到的問題的很多方法之一。我還探索:

myCommand.Parameters.Add(new SqlCeParameter("username", StaticUser.StudentUser.username)); 

傳遞參數,而哪些現在我想不起來了另一種方法(使用「.value的= StaticUser.StudentUser.username」我認爲)。此外,我嘗試使用命令的'using'語句來保存我自己關閉連接(我可能最終會使用使用'using'的解決方案)。最後(儘管這不是一個年代的回憶),我想:

SqlCeCommand myCommand = new SqlCeCommand("INSERT INTO bookings(username, room, time) VALUES(@username, @room, @time)", myConnection) 

再次,當然,也沒有用。

爲了突出顯示我遇到的問題的實際症狀:代碼似乎運行正常;通過我上面粘貼的完整方法的步驟顯示沒有錯誤被捕獲(當然,消息框不會出現 - 我後來意識到逐步執行可能是一個不必要的過程),而在其他方法中,我已經談到了同樣的事情發生。那麼問題就在於表'預訂'實際上並沒有被更新。

所以,我的問題,爲什麼?


我沒有做明顯的事情,並檢查更新的數據庫的調試文件夾。

+0

你正在添加'參數的方式很好myCommand.Parameters.AddWithValue',那麼你究竟面臨邁克爾的問題是什麼? – MethodMan 2013-03-25 18:28:27

+0

表'預訂'根本沒有被寫入。沒有錯誤,運行該過程後表格中沒有新字段。 – the1mike1man 2013-03-25 18:30:09

+0

您是否檢查過以確保您擁有'GRANT權限'來執行更新..?如果MessageBox沒有顯示它是否碰到你的代碼的'catch'部分..? – MethodMan 2013-03-25 18:31:56

回答

1

在bin/debug文件夾中查找數據庫文件的副本。 在連接字符串中使用完整路徑,最好不要在項目中包含SDF文件(或至少設置生成操作爲None)

+0

另外,我不確定您對連接字符串的含義。就目前而言,它指的是存儲完整路徑的app.config。這不好嗎?感謝您的所有幫助:D – the1mike1man 2013-03-25 18:50:03

+0

沒關係,我明白你的意思了。把數據庫(.sdf)放在某個地方,然後使用硬文件路徑......這很有道理。我之所以沒有這麼做,是因爲這個項目主要是在我的記憶棒上 - 我在家裏和學校裏進行研究 - 並且驅動器號改變了。 – the1mike1man 2013-03-25 19:01:32

0

我想你是不是定義爲命令 的連接嘗試

mycommand.connection = connectiostring;