【发布时间】:2020-10-03 22:14:32
【问题描述】:
尝试将新记录插入 MS Access .accdb 文件。当我运行下面的代码时,它似乎工作正常。没有出现错误,但数据库文件中也没有任何更新。我已验证数据库位于可访问的位置。
selectedNote 是具有三个列出的参数的对象。我没有在查询字符串中包含的唯一字段是 ID 字段,它是自动编号。
string scon = "Provider = Microsoft.ACE.OLEDB.12.0; Data Source = |DataDirectory|AMS.accdb";
string str = "INSERT INTO Notes ([ItemID], [Note], [Note Date]) VALUES (?, ?, ?)";
try
{
using (OleDbConnection con = new OleDbConnection(scon))
{
using (OleDbCommand cmd = new OleDbCommand(str, con))
{
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue("ItemID", selectedNote.ItemID);
cmd.Parameters.AddWithValue("Note", selectedNote.Note);
cmd.Parameters.AddWithValue("Note Date", selectedNote.NoteDate.ToString("dd-MM-yy"));
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
}
}
catch (Exception ex)
{
MessageBox.Show("Failed due to" + ex.Message);
}
谢谢大家,希望我能解决这个问题。
编辑:奇怪的是,我刚刚发现,如果我使用如下行硬编码 .accdb 文件的路径,它实际上会写入该文件。所以我想问题变成了为什么它不能在数据库与 exe 位于同一路径的构建路径上工作。
AppDomain.CurrentDomain.SetData("DataDirectory","C:\temp");
我尝试将DataDirectory 设置为AppDomain.CurrentDomain.BaseDirectory,但这似乎也不起作用。
【问题讨论】:
-
在你的代码中设置一个断点,检查
scon并确保它的Data Source是你认为的“数据库文件”。还有stop usingAddWithValue. -
你的项目是否引用了Access数据库?如果它是构建的一部分,并且您已将其设置为“始终复制”,则每次调试时您的更改都会被清除。
-
我确实引用了它,但它设置为“如果较新则复制”。我最初确实将其设置为“始终复制”,并希望这是简单的解决方法,但唉。
-
您正在查看的数据库文件和您正在更改的数据库文件几乎可以肯定是两个不同的文件。你没有给我们足够的信息来猜测发生了什么,但是changing
DataDirectorywill wreck your data 你必须在永久销毁数据库之前停止随机更改。 -
我认为这与你的约会有关。您应该始终将日期格式作为
Format("yyyy-MM-dd")作为 SQL 友好参数传递。
标签: c# visual-studio ms-access