首页 > 解决方案 > 在 C# 中将数据从数据网格传递到访问数据库的正确语法是什么

问题描述

我想用来自 datagridview 的数据填充本地访问数据库。我已将数据库添加到项目中,它的使用仅限于本地。我已经复制了连接字符串并构建了用于将数据传递到访问表中的查询。我正在从另一个 ViewForm1 输入数据,因此我在向其中添加数据时不访问数据库。

我构建项目,导航到表单,将数据写入表并按添加。结果是:

System.Data.OleDb.OleDbException:“插入到 Anweisung 中的 Syntaxfehler。” Diese Ausnahme wurde ursprünglich bei dieser Aufrufliste ausgelöst: System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(System.Data.OleDb.OleDbHResult) System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(System.Data.OleDb.tagDBPARAMS, out object) System. Data.OleDb.OleDbCommand.ExecuteCommandText(输出对象) System.Data.OleDb.OleDbCommand.ExecuteCommand(System.Data.CommandBehavior,输出对象) System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(System.Data.CommandBehavior,字符串)系统。 Data.OleDb.OleDbCommand.ExecuteNonQuery() vdefinder.databasecontrol.addToTableBtn_Click(object, System.EventArgs) 在 databasecontrol.cs System.Windows.Forms.Control.OnClick(System.EventArgs) 系统中。

如果我没有在 datagridviewcells 中输入任何内容 - 当我按下 Addbutton 时不会出现错误。

using System.Windows.Forms;
using System.Data.OleDb;

namespace vdefinder
{
    public partial class databasecontrol : Form
    {
        public databasecontrol()
        {
            InitializeComponent();
        }

        private void backToLoginBtn_Click(object sender, EventArgs e)
        {
            Hide();
            login li = new login();
            li.ShowDialog();
        }

        private void addToTableBtn_Click(object sender, EventArgs e)
        {
            OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\_VS_Projekte\vdefinder\vdefinder\vdefinder.mdb;Persist Security Info=True");

            for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
            {
                OleDbCommand cmd = new OleDbCommand(@"INSERT INTO vdefinder (Index, Kategorie, Inhalt) VALUES ('" + dataGridView1.Rows[i].Cells[0].Value + "', '"+dataGridView1.Rows[i].Cells[1].Value+"')", con);
                con.Open();
                cmd.ExecuteNonQuery();
                con.Close();
                MessageBox.Show("Data saved to table.");
            }
            dataGridView1.Rows.Clear();
        }
    }
}



标签: c#visual-studiodatagridviewsyntaxoledb

解决方案


该错误与插入语句语法有关。您可能需要检查以下行的传递参数:

OleDbCommand cmd = new OleDbCommand(@"INSERT INTO vdefinder (Index, Kategorie, Inhalt) VALUES ('" + dataGridView1.Rows[i].Cells[0].Value + "', '"+dataGridView1.Rows[i].Cells[1].Value+"')", con);

我相信您只有 2 个值,而 Index、Categorie 和 Inhalt 实际上需要 3 个值。


推荐阅读