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();
}
根据您的异常消息,TimeStamp
是 MS Access 中的保留关键字。您需要将其与方括号一起使用,例如 [TimeStamp]
.作为更好的方法,将其更改为对列有意义的非保留字。
但更重要的是,应始终使用参数化查询。这种字符串串联对SQL注入攻击是开放的。
还可以使用using
语句来处置您的OleDbConnection
和OleDbCommand
。
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();
}