我正在尝试用C#中的OleDB读取Excelfile并将其放入列表框中。我跟着很多指南,它的确有效!但是,它会持续显示50毫秒的延迟数据。这是非常小的,但我正在为我的一些同事做这个,我希望它能更好地工作,甚至更顺畅,即减少延迟。 excel文件不是很大,它包含~840项,所以我可以想象它可以更快。
首先,我将向您展示我将数据填入列表框的代码:
const int straatmeubilair = 0;
const int boomproducten = 1;
const int dekkenEnBruggen = 2;
String queryTempCategorie;
private void lbCategorie_SelectedIndexChanged(object sender, EventArgs e)
{
switch (lbCategorie.SelectedIndex)
{
case straatmeubilair:
queryCategorie = "A%";
break;
case boomproducten:
queryCategorie = "B%";
break;
case dekkenEnBruggen:
queryCategorie = "C%";
break;
}
if (queryTempCategorie != queryCategorie)
{
queryTempCategorie = queryCategorie;
updateTable(dbProductInfo.getData("SELECT DISTINCT [Productfamilie] FROM [Bestelinfo$] WHERE [Pagina] LIKE '" + queryCategorie + "' ORDER BY [Productfamilie] ASC"), lbFamilie, "Productfamilie");
}
}
private void updateTable(DataTable tempTable, ListBox tempListbox, String column)
{
tempListbox.DataSource = tempTable;
tempListbox.DisplayMember = column;
}
因此,当列表框更改其索引时,它会尝试使用从数据库请求的数据表填充另一个列表框。它还有一个额外的if / else语句来阻止它在最后一个请求相同时请求数据。来自Excel的数据请求显示在下面的代码中。
public DataTable getData(String query)
{
// Test features
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
Console.WriteLine(testAmount);
testAmount += 1;
// Clear the datatable
Console.WriteLine("CLEARING DATATABLE");
DataTable data = new DataTable();
// Create the connectionstring
strConnection = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + databasePathFile + @";Extended Properties=""Excel 12.0 xml;HDR=Yes;IMEX=1""";
// Create adapter
Console.WriteLine("CREATING ADAPTER");
adapter = new OleDbDataAdapter();
// Create connection
Console.WriteLine("CREATING CONNECTION");
connection = new OleDbConnection(strConnection);
// Create the command for the given connection
Console.WriteLine("CREATING COMMAND");
command = new OleDbCommand(query, connection);
try
{
// Open the connection
connection.Open();
// Give the command to the adapter
adapter.SelectCommand = command;
// Fill the dateset with the adapter
adapter.Fill(data);
}
catch (Exception e)
{
MessageBox.Show("Something went wrong, contact IT");
Console.WriteLine(e.Message);
}
finally
{
// Close connection
connection.Close();
// Dispose of adapter
adapter.Dispose();
TimeSpan ts = stopwatch.Elapsed;
string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}", ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds / 10);
Console.WriteLine("Runtime " + elapsedTime);
}
return data;
}
注意:connectionstring中的“databasePathFile”是在程序的前面定义的。
我认为我做了一些奇怪的事情,它一直让我拖延。有没有人有什么建议? (类似于:“你需要完全改变你的方法”也没关系:P我还在学习!不过我想保留这种方法。
答案 0 :(得分:0)
只需抛出两分钱,但尝试在单独的线程中运行 getData 函数。我指的是 - >的System.Threading。
通常,在多个线程上运行应用程序将使流程运行得更快,用户体验更加无缝。
如果您不熟悉在C#中使用线程,我将提供示例代码。
希望以上有所帮助。