选择数据库时表格不响应

时间:2018-07-16 04:00:46

标签: c#

每次打开程序时,都会说“无响应”。 尽管在我的表单事件加载中仅从数据库中检索数据。

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();
        }
    }

1 个答案:

答案 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 ! ");
        }
    }

有用的链接:

  1. 了解有关本机C#到sql连接的更多信息:https://www.codeproject.com/Articles/4416/Beginners-guide-to-accessing-SQL-Server-through-C
  2. 将sqlconnection与winForms结合使用:http://csharp.net-informations.com/data-providers/csharp-sql-server-connection.htm
  3. 连接字符串:https://www.connectionstrings.com/
  4. 在youtube上查看Tim Corey(https://www.youtube.com/user/IAmTimCorey),他拥有出色的c#教程,涉及线程,异步/等待,精简程序,ASP.NET等