首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OleDBException错误插入

OleDBException错误插入
EN

Stack Overflow用户
提问于 2013-03-27 10:44:05
回答 2查看 1.8K关注 0票数 2

我构建了一个c#应用程序,您可以在其中登录并注册一个新帐户。但是,当我点击我的按钮新帐户,并填写所需的字段,我将得到以下错误:

vcom.ExecuteNonQuery();-> OleDBException未处理。指令插入包含一个语法错误。

请参见下面的代码:

代码语言:javascript
复制
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;

namespace Eindopdracht
{
    public partial class maak_account : Form
    {

        OleDbConnection vcon = new OleDbConnection(@"provider= microsoft.jet.oledb.4.0;data source=sample.mdb");

        public maak_account()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            OleDbConnection vcon = new OleDbConnection(@"provider= microsoft.jet.oledb.4.0;data source=sample.mdb");
            vcon.Open();

            string test = string.Format("insert into inlog (PASSWORD, Username, leeftijd, gewicht) VALUES ('" + textBox2.Text + "','" + textBox1.Text + "','" + textBox3.Text + "','" + textBox4.Text + "')");
            OleDbCommand vcom = new OleDbCommand(test, vcon);
            vcom.ExecuteNonQuery();
            MessageBox.Show("Uw gegevens zijn opgeslagen");
            vcom.Dispose();
        }
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-27 10:47:12

语法错误的原因是Password (碰巧是列的名称)是一个保留关键字。

代码语言:javascript
复制
insert into inlog ([PASSWORD], Username, leeftijd, gewicht)
  • MS访问保留关键字

从MS Access Docs,

如果保留词已经在使用中,则可以避免错误消息,方法是用方括号( )将每个单词的出现括起来。但是,最好的解决方案是将名称更改为非保留字。

为了进一步改进代码,

  • 使用using语句正确释放对象
  • 使用try-catch正确处理异常
  • 参数化这些值以避免sql注入。

例如,

代码语言:javascript
复制
string connStr = @"provider= microsoft.jet.oledb.4.0;data source=sample.mdb";
string test = "insert into inlog ([PASSWORD], Username, leeftijd, gewicht) VALUES (?, ?, ?, ?)";

using(OleDbConnection vcon = new OleDbConnection(connStr))
{
    using(OleDbCommand vcom = new OleDbCommand(test, vcon))
    {
        vcom.Parameters.AddWithValue("PASSWORD", textBox2.Text);
        vcom.Parameters.AddWithValue("Username", textBox1.Text);
        vcom.Parameters.AddWithValue("leeftijd", textBox3.Text);
        vcom.Parameters.AddWithValue("gewicht", textBox4.Text);
        try
        {
            vcon.Open();
            com.ExecuteNonQuery();
        }
        catch(OleDbException ex)
        {
            // do something with the exception
        }
    }
}
票数 2
EN

Stack Overflow用户

发布于 2013-03-27 10:50:30

使用try/catch块捕获异常并查看错误消息。还可以在“最后”块中释放资源。即使抛出异常,最终块也将始终被执行。

代码语言:javascript
复制
try
{
    OleDbConnection vcon = new OleDbConnection(@"provider= microsoft.jet.oledb.4.0;data source=sample.mdb");
    vcon.Open();

    string test = string.Format("insert into inlog (PASSWORD, Username, leeftijd, gewicht) VALUES ('" + textBox2.Text + "','" + textBox1.Text + "','" + textBox3.Text + "','" + textBox4.Text + "')");
    OleDbCommand vcom = new OleDbCommand(test, vcon);
    vcom.ExecuteNonQuery();
    MessageBox.Show("Uw gegevens zijn opgeslagen");
}
catch(Exception ex)
{
    MessageBox.Show(ex.Message);
}
finally
{
    vcom.Dispose();
    vcon.Close();
    vcon.Dispose();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15656936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档