我使用C#函数来查询基于SqlConnection、SqlCommand和SqlDataAdapter的DB,但是当我试图检索大量行(数百万)时,性能非常差。
using (SqlConnection mySqlConnection = new SqlConnection(connectionString))
using (SqlCommand mySqlCommand = new SqlCommand(query, mySqlConnection)){
mySqlConnection.Open();
DataSet myDataSet = new DataSet();
using (SqlDataAdapter mySqlDataAdapter = new SqlDataAdapter(mySqlCommand)) {
affectedRow = mySqlDataAdapter.Fill(myDataSet);
}
}是否有方法优化大数据集的查询?
作为比较,这段VBA代码只需要4-5和20-22秒以上的C#。
Set cnt = New ADODB.Connection
Set rst = New ADODB.Recordset
Set cmd = New ADODB.Command
cnt.Open
Set rst = cnt.Execute(queryString)
Dim nDimArray As Variant
nDimArray = rst.GetRows
cnt.Close发布于 2015-04-30 15:44:39
不要使用DataSet。使用一个与您在VBA中所做的类似的SqlReader。
using (var mySqlConnection = new SqlConnection(connectionString))
using (var mySqlCommand = new SqlCommand(query, mySqlConnection))
{
mySqlConnection.Open();
var reader = mySqlCommand.ExecuteReader();
while (reader.Read())
{
}
reader.Close();
}这里有更多信息:https://msdn.microsoft.com/en-us/library/9kcbe65k%28v=vs.110%29.aspx
您也应该能够这样做,这将在您自己之后清理,以防在读取过程中抛出异常:
using (var mySqlConnection = new SqlConnection(connectionString))
{
using (var mySqlCommand = new SqlCommand(query, mySqlConnection))
{
mySqlConnection.Open();
using (var reader = mySqlCommand.ExecuteReader())
{
while (reader.Read())
{
}
}
}
}https://stackoverflow.com/questions/29972116
复制相似问题