gpt4 book ai didi

c# - 在 Access 中基于数据表行运行查询的快速/有效的方法?

转载 作者:行者123 更新时间:2023-12-02 21:57:46 27 4
gpt4 key购买 nike

我有一个数据表,其中可能有 1000 行左右。我需要逐行浏览数据表,获取列的值,运行查询(Access 2007 DB)并使用结果更新数据表。到目前为止,这是我所拥有的、有效的:

String FilePath = "c:\\MyDB.accdb";

string QueryString = "SELECT MDDB.NDC, MDDB.NDC_DESC "
+ "FROM MDDB_MASTER AS MDDB WHERE MDDB.NDC = @NDC";

OleDbConnection strAccessConn = new OleDbConnection(string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + FilePath));
strAccessConn.Open();
OleDbDataReader reader = null;

int rowcount = InputTable.Rows.Count; //InputTable is the datatable
int count = 0;

while (count < rowcount)
{
string NDC = InputTable.Rows[count]["NDC"].ToString();
//NDC is a column in InputTable

OleDbCommand cmd = new OleDbCommand(QueryString, strAccessConn);
cmd.Parameters.Add("@NDC", OleDbType.VarChar).Value = NDC;

reader = cmd.ExecuteReader();
while (reader.Read())
{
//update the NDCDESC column with the query result
//the query should only return 1 line
dataSet1.Tables["InputTable"].Rows[count]["NDCDESC"] = reader.GetValue(1).ToString();
}

dataGridView1.Refresh();
count++;
}
strAccessConn.Close();

然而,这似乎效率很低,因为查询需要为数据表中的每一行运行一次。有更好的办法吗?

最佳答案

您正在考虑 update query 。实际上,您不必一一检查每一行。 SQL 是 set based language ,因此您只需编写一条应该对所有行执行的语句。

这样做:

1) 创建 > 查询设计

2) 关闭选择表的对话框

3) 确保您处于 sql 模式(左上角)

4)粘贴此:

UPDATE INPUTTABLE 
INNER JOIN MDDB_MASTER ON INPUTTABLE.NDC = MDDB_MASTER.NDC
SET INPUTTABLE.NDCDESC = [MDDB_MASTER].[NDC_DESC];

5) 切换到设计模式看看会发生什么。您可能需要更正输入表,我找不到它的名称。我假设它们都在同一个数据库中。

您将看到查询类型现在是更新查询。

您可以通过cmd.ExecuteNonQuery(sql)运行此文本,整个过程应该运行得非常快。如果没有,您将需要在其中一张表上建立索引;

这是通过连接 NDC 上的两个表,然后将 NDC_DESC 从 MDDB_MASTER 复制到输入表来实现的。

关于c# - 在 Access 中基于数据表行运行查询的快速/有效的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17456921/

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