作为一个小组,我们正在开发一个项目,需要将标签中收集的数据保存在访问数据库的字段中。但是我们在使用这个功能时遇到了一些麻烦。
以下是我到目前为止所尝试的代码:
我们将值从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();
}
答案 0 :(得分:1)
根据您的异常消息,TimeStamp
是MS Access中的reserved keyword。您需要使用方括号(如[TimeStamp]
)。作为更好的方法,将其更改为对您的列有意义的非保留字。
但更重要的是,您应该始终使用parameterized queries。这种字符串连接对SQL Injection攻击开放。
还可以使用using
statement来处置您的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();
}