在窗体关闭 (C#) 上关闭 SQL 连接

本文关键字:SQL 连接 窗体 | 更新日期: 2023-09-27 18:32:00

我创建了一个查询 db2 数据库并返回信息的小应用程序。我创建了一个接受输入并从查询返回信息的窗口窗体。我的结束语是:

finally { conn.close(); }

我很好奇 - 当我点击表单上的小红框时,连接(conn)实际上会关闭吗?我在这里和网上搜索了其他问题,但无法真正找到明确的答案。

这是完整的尝试-捕获-最终块(一些信息被混淆 --> *****):

'尝试 {

            conn.Open();
            string queryString = String.Format("SELECT * " +
                                                "FROM ***** " +
                                                "WHERE USERPRF LIKE '%{0}%' " +
                                                "ORDER BY TIMESTMP DESC " +
                                                "FETCH FIRST 1 ROWS ONLY", userNameInput);
            using (OdbcCommand com = new OdbcCommand(queryString, conn))
            {
                using (OdbcDataReader reader = com.ExecuteReader())
                {
                    if (reader.Read())
                    {
                        string ***** = reader["*****"].ToString();
                        string ***** = reader["*****"].ToString();
                        string user = reader["USERPRF"].ToString();
                        string timeStamp = reader["TIMESTMP"].ToString();
                        listBox1.Items.Clear();
                        listBox1.Items.Add("Username: " + user);
                        listBox1.Items.Add("*****" + *****);
                        listBox1.Items.Add("*****: " + *****);
                        listBox1.Items.Add("Last Changed: " + timeStamp);
                    }
                    else
                    {
                        listBox1.Items.Clear();
                        listBox1.Items.Add("There was no data to return! Try again.");
                    }
                }
            }
        }
        catch (Exception ex)
        {
            string errorMessage = ex.Message;
        }
        finally
        {
            conn.Close();
        }`

在窗体关闭 (C#) 上关闭 SQL 连接

如果连接归应用程序所有,那么是的 - 它应该关闭。长时间保持连接打开状态通常是不好的做法,因为这会带来安全风险。(有人可以将代码注入您的应用程序以重用打开的连接,做一些狡猾的事情)

using (SqlConnection cn = new SqlConnection(strConnectString))
{
    // Stuff
}

我会确保你处理你的窗口窗体的onClose事件,并告诉它显式地释放SqlConnection,或者至少尝试这样做。安全总比后悔好。

注意 - 我听过一些关于SqlConnections可以在SQLConnectionPool中共享的讨论。如果是这种情况,可以修改连接字符串以禁用或启用连接池。