INSERT INTO语句中的语法错误在Access中插入

时间:2018-02-26 13:50:42

标签: c# oledb ms-access-2016

我使用access2016数据库在c sharp中创建了一个Accounts Project,我想在用户管理表单中输入用户数据时单击“保存”按钮会出现此错误

  

" System.Data.OleDb.OleDbException:INSERT INTO语句中的语法错误"在c#。

这是我的代码;

public partial class frmUsers : MetroFramework.Forms.MetroForm
{
    OleDbConnection con = new OleDbConnection(ConfigurationManager.AppSettings ["con"]);
    OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\DataBase.accdb;");

    public frmUsers()
    {
        InitializeComponent();
    }


    private void btnSave_Click(object sender, EventArgs e)
    {
        //string InsertPur= "insert into [Users] (UserCode,UserName,UserID,Password,Designation,ContactNo,UserType) values (" + txtUserCode.Text + ", '" + txtUserName.Text + "','" + txtUserID.Text + "','" + txtPassword.Text + "','" + txtDesignation.Text + "'," + txtContactNo.Text + ",'" + cboxUserType.Text + "')";
        OleDbDataAdapter da = new OleDbDataAdapter("insert into Users(UserCode,UserName,UserID,Password,Designation,ContactNo,UserType) values (" + txtUserCode.Text + ", '" + txtUserName.Text + "', '" + txtUserID.Text + "', '" + txtPassword.Text + "', '" + txtDesignation.Text + "', " + txtContactNo.Text + ", '" + cboxUserType.Text + "')", con);

        DataSet ds = new DataSet();
        da.Fill(ds);    //**Error Pointed here**
        ViewData();

        clearData();
        txtUserName.Focus();
    }
}

3 个答案:

答案 0 :(得分:1)

您错过了一些文字框周围的单引号,例如txtUserCode和... '" + txtUserCode + "'。 但是,您应始终使用parameterized queries来避免SQL注入。你的代码应该是这样的:

OleDbDataAdapter da = new OleDbDataAdapter("insert into Users(UserCode,UserName,...) values"
                                                  + " (@UserCode,@UserName,...)", con);
da.InsertCommand.Parameters.AddWithValue("@UserCode", txtUserCode.Text);
//Other parameters

虽然直接指定类型并使用Value属性比AddWithValue更好。

Can we stop using AddWithValue() already?

答案 1 :(得分:1)

您的代码有格式错误,如果它与您的实际代码相同,则应该修复:

在您的文本框中,您需要在此txtUserCode周围添加单引号,否则它不会被注册为整个参数

'" + txtUserCode + "'

你真的不应该把你的数据直接放到你的查询中,因为它可能导致安全问题并且人们将sql注入其中。尽可能尝试使用参数化查询。这就是原因。

Why do we always prefer using parameters in SQL statements?

答案 2 :(得分:0)

密码是Access SQL中的保留字,因此请在字符串中使用[Password]