我有一个简单的数据库应用程序,允许用户在某些特定条件下搜索MSSQL表,然后将找到的结果导出到日志文件中。
我遇到了一个奇怪的错误,导致应用程序冻结,但只有当我运行" Release"构建,从来没有在Visual Studio中运行Debug构建。我可以毫无问题地运行各种查询。但是,如果我运行的第一个查询返回0结果,则在尝试将数据表中的结果加载到datagrid视图时,返回任何结果的下一个查询将始终失败。
我很确定它崩溃是因为我没有遵循我的最佳做法,但我不完全确定原因。
这是截断的代码片段。
//Declared in the start of the class
DataTable DBResults = new DataTable();
//This is run inside of a method called by a background worker.
DBResults.Clear();
SqlDataAdapter da = new SqlDataAdapter(sqlQuery, SQLConnection);
SqlConnection SQLCon = new SqlConnection(getConnectionString());
//This is wrapped inside a try/catch/finally.
SQLCon.Open();
da.Fill(DBResults);
SQLCon.Close();
//Finally, push the data into the Datagridview inside of the form.
//This is the line that will always freeze the app when running a Final build, but not a debug build.
dataGridView_Results.DataSource = new DataView(DBResults);
this.dataGridView_Results.Refresh();
//I discovered that if I changed the crashing line to copy instead, it won't crash:
dataGridView_Results.DataSource = new DataView(DBResults.Copy());
我假设它是因为数据源仍然在DbResults有一个指针。但奇怪的是,如果我有结果,它不会导致问题,只有当第一次搜索返回0结果时才会出现问题。它的视觉工作室2012 .NET 4,如果它有所作为。
答案 0 :(得分:0)
Etan,您应该将数据表直接分配给datagridview的datasource属性,而不必执行新的操作。它应该是这样的:
dataGridView_Results.DataSource = DBResults;
我真的不太了解下面一行的复制属性。