每次打开程序时,都会说“无响应”。 尽管在我的表单事件加载中仅从数据库中检索数据。
private void form1_Load(object sender, EventArgs e)
{
//LoadDb_1()
//LoadDb_2()
//LoadDb_3()
}
我尝试将加载数据库置于form1_shown
事件中,但是它也不起作用。
我该如何克服呢?,我不想等待几分钟来使用该程序。
PS:我不知道如何使用线程或异步
更新
LoadDb_1()内部的示例
public void LoadDb_1()
{
SqlCommand command = new SqlCommand();
SqlDataAdapter adapter = new SqlDataAdapter();
Datatable dt_main = new Datatable();
try
{
dt_main.Clear();
myConnection.Open();
command.Connection = myConnection;
command.CommandType = CommandType.StoredProcedure;
command.CommandText = "General.SP_Car";
adapter.SelectCommand = command;
adapter.Fill(dt_main);
gridControl1.DataSource = dt_main;
}
catch (Exception ex)
{
MessageBox.Show("error" + ex);
}
finally
{
myConnection.Close();
}
}
答案 0 :(得分:1)
您有阻止操作,阻止了主线程,这就是您的应用程序不响应的原因,要解决此问题,取决于您如何连接数据库,EF6或EFCore,基本,精简程序。 正如您所说,您不了解异步编程或多线程,一种实现方式是在需要时连接到数据库,例如单击一下,然后连接到数据库,获取数据,然后关闭连接,应用程序将在几秒钟内没有响应,但这是一种方法... 正如我所说,您的应用程序存在一个大问题,不仅不响应Windows,连接始终处于打开状态,您不应该这样做,这会使您的应用程序和服务器容易受到攻击
private void button1_Click(object sender, EventArgs e)
{
SqlConnection cnn = new SqlConnection("your connection string....");
try
{
cnn.Open();
SqlCommand myCommand = new SqlCommand("SQL query....", cnn);
SqlDataReader reader = myCommand.ExecuteReader();
while(reader.Read())
{
// Access the columns by reader["columnName"]
}
// Don't forget to close the connection
cnn.Close();
}
catch (Exception ex)
{
MessageBox.Show("Can not open connection ! ");
}
}
有用的链接: