2014-12-29 21 views
-1

我已經有了輸入工作,但現在我需要添加到原來的數字,每次我輸入數據庫,但我不知道該怎麼做,任何幫助如果您想更新現有記錄添加新的價值,你的領域,或插入新記錄,如果它不存在,你需要了解你的數據庫已經包含Username將不勝感激:)不知道如何在數據庫中添加值

String myConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=E:/coursework/Databases/runner database.accdb;"; // location of the database 
OleDbConnection myConnection = new OleDbConnection(myConnectionString); // To create the database connection 
OleDbCommand myCommand = new OleDbCommand(); // Use the connection for the command 
myCommand.Connection = myConnection; 

try 
{ 
    myConnection.Open(); // Opens the database connection 
    string query = "insert into tblTrainingInformation ([Username],[Calories Burnt]) values('"+GlobalUsername.username+"','" + this.txtCaloriesBurntRun.Text + "')"; 
    OleDbCommand createCommand = new OleDbCommand(query, myConnection); 
    createCommand.ExecuteNonQuery(); 
    MessageBox.Show("Your running information has been saved"); 
    myConnection.Close(); 
} 
catch (Exception ex) 
{ 
    MessageBox.Show(ex.Message); 
} 
+3

什麼是失敗,消息是什麼。你也需要使用命令參數來避免sql注入。 – mybirthname

+0

什麼是原始號碼? –

+0

完美[Little Bobby Tables](http://imgs.xkcd.com/comics/exploits_of_a_mom.png)。 –

回答

0


所以,你需要先運行一個SELECT查詢,然後決定是否需要更新或INSERT
(Access沒有某種UPSERT聲明,如MySQL或SQL Server)的

String myConnectionString = "....."; 
string querySel = @"SELECT [Username],[Calories Burnt] 
        FROM tblTrainingInformation 
        WHERE [Username] = @uname"; 
using(OleDbConnection myConnection = new OleDbConnection(myConnectionString)) 
using(OleDbCommand myCommand = new OleDbCommand(querySel, myConnection)) 
{ 
    myConnection.Open(); 
    myCommand.Parameters.AddWithValue("@uname", GlobalUsername.username); 
    using(OleDbDataReader reader = myCommand.ExecuteReader()) 
    { 
     int calories = 0; 
     string query = ""; 
     if(reader.Read()) 
     { 
      // The record exists, read the calories and add the new value 
      // then execute the UPDATE 
      calories = Convert.ToInt32(reader["Calories Burnt"]); 
      calories += Convert.ToInt32(this.txtCaloriesBurntRun.Text); 
      query = @"UPDATE tblTrainingInformation 
         SET [Calories Burnt] = @cal 
         WHERE [Username] = @uname"; 
     } 
     else 
     { 
      // Record doesn't exist, INSERT the new data 
      calories = Convert.ToInt32(this.txtCaloriesBurntRun.Text); 
      query = @"INSERT INTO tblTrainingInformation 
         ([Calories Burnt],[Username]) 
         VALUES(@cal, @uname)"; 
     } 
     reader.Close(); 
     myCommand.Parameters.Clear(); 
     myCommand.Parameters.AddWithValue("@cal", calories); 
     myCommand.Parameters.AddWithValue("@uname", GlobalUsername.username); 
     myCommand.ExecuteNonQuery(); 
     MessageBox.Show("Your running information has been saved"); 
    } 
} 

我有在這裏做了一些假設。
第一個我假設UserName是此表中的主鍵,因此您可以使用WHERE用戶名值檢索記錄。
第二個假設是字段Calories Burnt的類型。
它應該是一個數字字段,爲了簡化示例,我認爲它是一個整數。

如果這些假設不正確,應該檢查並修復這些假設。

說的是,注意使用Using語句正確處理連接,命令和閱讀器。從查詢中刪除字符串連接是另一個重要的一點。你應該總是使用參數集合來避免Sql注入(儘管Access不太可能),並且在解析你的值的時候出錯。

關於參數順序的最後一個註釋。 OleDb希望參數按照參數佔位符在查詢文本中出現的確切順序排列,所以我已經將INSERT的順序顛倒爲與UPDATE命令兼容

+0

[不推薦使用AddWithValue。](http://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/) – BCdotWEB

相關問題