我正在尝试为我们的电影数据库创建注册。我正在尝试从我们制作的MS Access建立连接。但每当我运行我的代码时,我都会收到错误。我正在使用Visual Studio Express 2012 C#。
为什么我的代码会触发此错误?
“类型'System.Data.OleDb.OleDbException'的未处理异常 发生在System.Data.dll中的附加信息:语法错误 INSERT INTO声明。“
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.OleDb;
namespace BigScreen
{
public partial class sign_up : Form
{
private OleDbConnection connection = new OleDbConnection();
public sign_up()
{
InitializeComponent();
}
private void sign_up_Load(object sender, EventArgs e)
{
connection.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\raizel\Desktop\DataBase\Movie_Database.accdb;
Persist Security Info=False;";
}
private void sign_up_FormClosed(object sender, FormClosedEventArgs e)
{
Form1 thisform = new Form1();
thisform.Show();
}
}
private void button1_Click(object sender, EventArgs e)
{
connection.Open();
OleDbCommand command = new OleDbCommand();
command.Connection = connection;
command.CommandText = "Insert into User ([firstname], [lastname], [username], [password]) values ('" + textBox2.Text + "','" + textBox5.Text + "','" + textBox4.Text + "','" + textBox1.Text + "')";
command.ExecuteNonQuery();
userID++;
MessageBox.Show("Data Saved!");
connection.Close();
}
}
}
答案 0 :(得分:4)
User
是reserved word。像这样括起来通知db引擎这个单词是一个对象名:
Insert into [User] ...
你最好切换到Bradley暗示的参数化查询,但你仍然需要将保留字括起来。
答案 1 :(得分:0)
用户是sql server中leat的保留字。你的代码中有一些东西,你正在使用连接,这使你的代码有sql注入的危险,密码可以在数据库中以明文形式加密。
您需要在代码中使用use以确保在插入完成后关闭连接。如果错误引发异常,则连接保持打开状态,并且在将来尝试执行任何操作时都会遇到问题。关闭数据库并确保可以使用设计器执行操作,然后再次检查代码。
尝试移动到sql server ms访问对你的系统来说不是一个好的数据库。