【发布时间】:2013-07-01 16:05:05
【问题描述】:
我有一个可能有 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();
但是这似乎非常低效,因为查询需要为数据表中的每一行运行一次。有没有更好的办法?
【问题讨论】:
-
想知道如果您尝试在 sproc 中完成所有这些操作会怎样?
-
什么版本的 Access?
-
@EkoostikMartin - 访问 2007
-
MDDB_MASTER 表是否很大?您可以通过运行不带 WHERE 子句的查询来复制整个表,然后使用 LINQ 搜索 .NET DataTable 对象
-
@nicholas - MDDB_MASTER 有 225,000 行和 75 列,因此相当大。
标签: c# sql ms-access datatable