不知道如何在数据库中加值

本文关键字:数据库 不知道 | 更新日期: 2023-09-27 18:35:30

我已经有了输入工作,但现在每次输入数据库时都需要添加到原始数字,但我不知道该怎么做,任何帮助将不胜感激:)

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);
}

不知道如何在数据库中加值

如果要更新现有记录,向字段添加新值或插入新记录(如果不存在),则需要知道数据库是否已包含Username
所以你需要先运行一个 SELECT 查询,然后决定你是需要更新还是插入
(Access 没有像 MySql 或 Sql Server 那样的 UPSERT 语句)

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 命令兼容