C# 表单应用程序 - 保存数据以访问数据库

本文关键字:访问 数据库 数据 保存 表单 应用程序 | 更新日期: 2023-09-27 18:36:31

作为一个小组,我们正在处理一个项目,需要将标签中收集的数据保存在访问数据库的字段中。 但是,我们在使用此功能时遇到了一些麻烦。

这是我到目前为止尝试过的代码:

出于测试目的,我们将值从 lbl.View.text 更改为"1",但仍然没有运气。

    private void complete_btn_Click(object sender, EventArgs e)
    {      
        string connStr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=F:'meSch'log.accdb;Persist Security Info=True";
        OleDbConnection con = new OleDbConnection();
        con.ConnectionString = connStr;
        OleDbCommand cmd = con.CreateCommand();
        // error is in insert statement somehwhere. 
        cmd.CommandText = "INSERT INTO Users (TimeStamp, Interest, TotalTime)" + "VALUES('" + "1" +"', '"+ "1" + "','" + "1" + "');";
        // conn1 = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=F:'meSch'log.accdb;Persist Security Info=True");
        // cmd = new OleDbCommand("", con);
        // cmd.Parameters.AddWithValue("@TimeStamp", lblView.Text);
        // cmd.Parameters.AddWithValue("@Interest", lblView.Text);
        // cmd.Parameters.AddWithValue("@TotalTime", lblView.Text);
        con.Open();
        cmd.ExecuteNonQuery();
        con.Close();
    }

C# 表单应用程序 - 保存数据以访问数据库

根据您的异常消息,TimeStamp是 MS Access 中的保留关键字。您需要将其与方括号一起使用,例如 [TimeStamp] .作为更好的方法,将其更改为对列有意义的非保留字。

但更重要的是,应始终使用参数化查询。这种字符串串联对SQL注入攻击是开放的。

还可以使用using语句来处置您的OleDbConnectionOleDbCommand

using(OleDbConnection con = new OleDbConnection(conString))
using(OleDbCommand cmd = con.CreateCommand())
{
    cmd.CommandText = @"INSERT INTO Users (TimeStamp, Interest, TotalTime)
                        VALUES(?, ?, ?)";
    cmd.Parameter.AddwithValue("@p1", "1");
    cmd.Parameter.AddwithValue("@p2", "1");
    cmd.Parameter.AddwithValue("@p3", "1");
    con.Open();
    cmd.ExecuteNonQuery();
}