gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 04:58:44 25 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/

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