gpt4 book ai didi

c# - 将数据从 DataTable 传输到 Access 数据库时出现 Insert INTO 错误

转载 作者:太空宇宙 更新时间:2023-11-03 12:47:07 26 4
gpt4 key购买 nike

我有一个包含 5 列(歌曲、艺术家、专辑、流派、时间)的数据表,该表允许我输入任意多行来创建音乐播放列表,当用户认为合适时,他们可以单击按钮导出数据以进行 Access 。我的 Access 数据库有一个名为“播放列表”的表,其中包含与数据表相同的 5 列。尝试传输数据时,我不断收到 Insert INTO 语句的异常错误,我不知道为什么,因为我使用的是 commandBuilder。我附上了执行此操作的类和方法。

请指教!

public void ExportPlaylistToAccess(DataTable playlist)

{

// open connection to the database pathed to

String connection = @"Provider=Microsoft.ACE.OLEDB.12.0;" +

@"Data source= D:\CIS 465\Final Project\VirtualiPod\iTunesPlaylistDatabase.accdb";

using (OleDbConnection con = new OleDbConnection(connection))

{

var adapter = new OleDbDataAdapter();

adapter.SelectCommand = new OleDbCommand("SELECT * from [Playlist]", con);

var cbr = new OleDbCommandBuilder(adapter);

cbr.GetDeleteCommand();

cbr.GetInsertCommand();

cbr.GetUpdateCommand();

try

{

con.Open();

adapter.Update(playlist);

}

catch (OleDbException ex)

{

MessageBox.Show(ex.Message, "Database Error");

}

catch (Exception x)

{

MessageBox.Show(x.Message, "Exception Error");

}

}

创建数据表

private void createPlaylist_Click(object sender, EventArgs e)

{

if (playlist.Rows.Count == 0)

{

playlist.Columns.Add("Song");

playlist.Columns.Add("Artist");

playlist.Columns.Add("Album");

playlist.Columns.Add("Genre");

playlist.Columns.Add("Time");

dataGridView1.DataSource = playlist;

}

else if (playlist.Rows.Count > 0)

{

MessageBox.Show("Please clear your current playlist to create a new one.");

}

}

// adds song to playlist for user upon click

private void addToPlaylist_Click(object sender, EventArgs e)

{

IITTrackCollection tracks = app.LibraryPlaylist.Tracks;

IITTrack currentTrack = app.CurrentTrack;

DataRow newRow;

newRow = playlist.NewRow();

newRow["Song"] = currentTrack.Name;

newRow["Artist"] = currentTrack.Artist;

newRow["Album"] = currentTrack.Album;

newRow["Genre"] = currentTrack.Genre;

newRow["Time"] = currentTrack.Time;

playlist.Rows.Add(newRow);

dataGridView1.DataSource = playlist;

}

最佳答案

时间是一个保留字。出于某种原因,命令生成器不会用方括号 [time] 将数据库保留字(时间、日期、长等)的字段括起来,这将允许插入查询正常工作。如果没有括号,插入将失败,因为 SQL 编译器不知道字符串时间是 sql 命令还是字段名。我找到的唯一解决方案是重命名您的数据库字段,以便它们不会与数据库保留名称冲突。希望 MS 最终会修复这个错误。

关于c# - 将数据从 DataTable 传输到 Access 数据库时出现 Insert INTO 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36903450/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com