【问题标题】:Cannot connect MS Access to C#无法将 MS Access 连接到 C#
【发布时间】:2015-09-29 00:28:36
【问题描述】:

我正在尝试为我们的电影数据库创建一个注册。我正在尝试从我们创建的 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();

    }
}

}

【问题讨论】:

  • 也许您的文本框有垃圾/无数据导致语法错误。顺便说一句,该代码大量对 SQL 注入开放
  • 我很确定在点击保存之前我已经输入了值。
  • 然后检查您的完整 SQL 字符串。您得到的错误很清楚,其中存在 SQL 语法错误。
  • 我好像真的找不到。这段代码之前完美运行。
  • 任何输入中的单引号都会导致错误。

标签: c# .net ms-access


【解决方案1】:

User 是一个reserved word。像这样将其括起来以通知数据库引擎 word 是一个对象名称:

Insert into [User] ...

正如 Bradley 所暗示的那样,您最好切换到参数化查询,但您仍然需要将保留字也放在括号内。

【讨论】:

  • 除了 SQL 注入之外,使用参数将从根本上消除您的代码的丑陋。绝对值得一看。这是一个很好的例子,你可以使用AddWithValue 使它更干净。 stackoverflow.com/questions/5893837/…
  • @Hambone 不错的提示。我试试看。
【解决方案2】:

User 至少是 sql server 中的保留字。您的代码中有一些东西,您正在使用连接,这使您的代码处于 sql 注入的危险中,密码可以是您需要加密的数据库中的明文。

您需要在代码中使用 using 以确保在插入完成后关闭连接。如果错误引发异常,则连接保持打开状态,您将来尝试执行任何操作时都会遇到问题。关闭您的数据库并确保您可以使用设计器执行操作,然后再次检查您的代码。

尝试转移到 sql server ms 访问对您的系统来说不是一个好的数据库。

I made this example using your structure in sql fiddle

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-03
    • 1970-01-01
    • 1970-01-01
    • 2014-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多