【发布时间】:2016-04-28 01:01:43
【问题描述】:
我有一个包含 5 列(歌曲、艺术家、专辑、流派、时间)的数据表,该表允许我输入任意多的行来创建音乐播放列表,当用户认为合适时,他们可以点击按钮导出要访问的数据。我的访问数据库有一个名为“播放列表”的表,其中包含与数据表相同的 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;
}
【问题讨论】:
-
数据表是如何创建的?如果您只是在代码中构建了一个,即使您使用相同的名称,适配器也不知道如何将其中的数据保存到数据库中。
-
我在创建数据表的地方编辑了我的原始帖子。
-
DataTable 需要从目标表创建。为此使用您的 SELECT 查询。并使 DataAdapter 成为表单/类级别的对象,这样它就可以保留 INSERT、DELETE 和 UPDATE 的智能。 example
-
...另外,时间是Access SQL中的保留字,很难相信它也是字符串类型。
-
我正在将时间列更改为持续时间,谢谢!
标签: c# sql ms-access datatable transfer