gpt4 book ai didi

c# - 如何从 MySQL 数据库内容动态创建 Access DB 并保存在本地

转载 作者:行者123 更新时间:2023-11-30 23:23:35 27 4
gpt4 key购买 nike

我有一个用于公司库存的远程 MySQL 数据库。库存数据库是我们分包设备的所有地点的主数据库。每个属性(property)都有自己的库存,对于季度库存,每个地点都需要带一台笔记本电脑和一台扫描仪,扫描他们的库存,然后将其同步到主数据库。

问题是并非所有位置都可以轻松 Access 互联网,因此我需要将数据库复制到本地文件。并发性不是问题,因为只有一个客户端会同时连接到数据库,并且每个位置的数据库都相对较小,基本上由 <1000 行 7 列组成。

我已经在 HD 上创建了一个 Access 文件,但我无法真正从 MSDN 中了解到如何创建具有特定架构的文件或如何将相关数据从我的 SELECT 语句插入到所述数据库中。我一直在寻找动态创建表适配器并使用 .NET 的内置方法进行数据传输,但我仍然找不到如何以编程方式创建具有特定模式的 MS Access 文件。如果有人以前遇到过这样的问题,我将不胜感激任何可以提供的见解。我基本上需要将 SELECT 语句的结果复制到我将存储在本地的 MS Access 数据库中。我已准备好所有其他代码。

我目前正在使用一个相当笨拙的查询和 foreach 循环来完成我的肮脏工作,但我希望有一个更优雅的解决方案,也许使用动态创建的数据源。

ADOX.Catalog cat = new ADOX.Catalog();

cat.Create("Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source="+ fileName + ";" + "Jet OLEDB:Engine Type=5");

string conString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + fileName + ";" + "User Id=admin;Password=;";

OleDbConnection con = new OleDbConnection(conString);

con.Open();

//create command to generate database schema
OleDbCommand command = new OleDbCommand();
command.CommandText = @"CREATE TABLE items (
[category] VARCHAR(16) NOT NULL,
[manufacturer] VARCHAR(32) NOT NULL,
[model] VARCHAR(32),
[description] TEXT NOT NULL,
[serial_number] VARCHAR(64),
[barcode] VARCHAR(8) NOT NULL PRIMARY KEY,
[property] VARCHAR(4) NOT NULL,
[present] TINYINT
)";

command.Connection = con;
command.ExecuteNonQuery();

OleDbCommand cmdInsert = new OleDbCommand();
cmdInsert.CommandText = "INSERT INTO items([category],[manufacturer],[model],[description],[serial_number],[barcode],[property],[present]) VALUES (@cat,@man,@mod,@desc,@ser,@bar,@prop,@pres)";
cmdInsert.Connection = con;

foreach (DataRow row in itemsTableAdapter1.GetData())
{
cmdInsert.Parameters.AddWithValue("@cat",row.ItemArray[0].ToString());
cmdInsert.Parameters.AddWithValue("@man", row.ItemArray[1].ToString());
cmdInsert.Parameters.AddWithValue("@mod", row.ItemArray[2].ToString());
cmdInsert.Parameters.AddWithValue("@desc", row.ItemArray[3].ToString());
cmdInsert.Parameters.AddWithValue("@ser", row.ItemArray[4].ToString());
cmdInsert.Parameters.AddWithValue("@bar", row.ItemArray[5].ToString());
cmdInsert.Parameters.AddWithValue("@prop", row.ItemArray[6].ToString());
cmdInsert.Parameters.AddWithValue("@pres", row.ItemArray[7]);
cmdInsert.ExecuteNonQuery();
cmdInsert.Parameters.Clear();
}
con.Close();
cat = null;

最佳答案

我以前尝试过这样做,但发现为了创建一个新的 AccessDB,我实际上必须复制一个现有的数据库,其中包含我需要的所有表等。

你能使用sqlite?吗?它小巧、稳定,并且大多数语言都有可用的库。您将能够在客户端计算机上创建您喜欢的任何结构。

关于c# - 如何从 MySQL 数据库内容动态创建 Access DB 并保存在本地,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14416165/

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