c# - 在 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();
}
}
}
解决方案
该错误与插入语句语法有关。您可能需要检查以下行的传递参数:
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 个值。
推荐阅读
- php - 在大文档的新行之间搜索随机文档“标题”
- sql - 在基于表单字段的 MS Access 查询中选择 TOP x?
- c# - C#中简单的口袋妖怪战斗的麻烦
- symfony4 - 子文件夹中的 Symfony 4 实体
- html - 如何对文本同时使用文本阴影和线性渐变?
- python - 为什么应用内核掩码得到高斯图像时,输出只是没有内容的白色图像?
- google-chrome-extension - chrome.storage.sync.get 总是返回默认值
- sql-server - SQL Server Management Studio 中的垂直选项卡 - 并排查询和结果?
- node.js - 我可以使用 MongoDB 模式模型来定义 IndexedDB 索引吗?
- javascript - 使用 onclick 事件传递参数