C#从数据集填充访问数据库

时间:2017-07-27 16:39:36

标签: c# sql database ms-access dataset

我有一个应该打开,编辑,创建和保存访问数据库的程序。为了保存,我只使用表复制一个空数据库(只是为了避免经历创建每个表和列等的麻烦)并尝试通过TableAdapterManager.UpdateAll方法用值填充它。

string _TemplateConnectString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};";
_connection = new OleDbConnection(string.Format(_TemplateConnectString, dlg.FileName));
_connection.Open();

DataSet1TableAdapters.TableAdapterManager tam=new TableAdapterManager();
tam.Connection = _connection;
try
{
    tam.UpdateAll(dataset);
}
catch (System.Exception ex)
{
   MessageBox.Show("Update failed");
}

它完成没有例外,但值不会插入到新数据库中。

另据我所知,UpdateAll方法只更新修改后的行,所以如果我打开一些数据库并插入行,即使数据库中没有我要填充的内容也不会考虑它们。

我还尝试使用ADODB和ADOX扩展来填充数据库,但我发现的所有解决方案都是大量的硬编码,而不考虑层次结构,密钥等。

有没有办法强制在新数据库中插入所有内容?

3 个答案:

答案 0 :(得分:0)

您的模板数据库是否在Visual Studio项目目录中?它可能与Visual Studio将数据库复制到bin / debug或bin / release文件夹...

有关

答案 1 :(得分:0)

尝试使用正确的数据源数据库名称,此处为 excel文件的示例:

cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
       "Data Source=c:\somepath\ExcelFile.xls;" & _
       "Extended Properties=""Excel 8.0;HDR=Yes;"";" 

答案 2 :(得分:0)

笨拙的解决方案,但它的工作原理。我迭代数据集的表并保存通过一个sql字符串生成器,如下所示:

void SaveTable(DataTable dt)
    {
        string[] inserts;
        try
        {
            inserts = SqlHelper.GenerateInserts(dt, null, null, null);

            foreach (string s in inserts)
            {
                OleDbCommand cmd = new OleDbCommand();
                cmd.CommandText = s;
                cmd.Connection = _connection;
                int n = cmd.ExecuteNonQuery();
            }
        }
        catch (Exception e)
        {
            SaveOk = false;
        }
    }

我在这个网站的某个地方找到了SqlHelper,但是完全丢失了,不幸的是。所以这里是带有https://pastebin.com/iCMVuYyu

的pastebin
相关问题