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

时间:2015-01-07 15:19:35

标签: c# database ms-access oledb

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

以下是我到目前为止所尝试的代码:

我们将值从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();
    }

1 个答案:

答案 0 :(得分:1)

根据您的异常消息,TimeStamp是MS Access中的reserved keyword。您需要使用方括号(如[TimeStamp])。作为更好的方法,将其更改为对您的列有意义的非保留字。

但更重要的是,您应该始终使用parameterized queries。这种字符串连接对SQL Injection攻击开放。

还可以使用using statement来处置您的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();
}