关闭窗体上的 SQL 连接 (C#)
Close SQL Connection on Form Close (C#)
我创建了一个查询 db2 数据库和 returns 信息的小应用程序。我创建了一个 windows 表单,它接受输入和 returns 来自查询的信息。我的结束语是:
finally
{
conn.close();
}
我很好奇 -- 当我点击表单上的小红框时,连接 (conn) 是否真的关闭了?我在此处和网络上搜索了其他问题,但无法真正找到明确的答案。
这是完整的 try-catch-finally 块(有些信息被混淆了 --> *****):
`试试
{
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();
}`
如果连接由应用程序拥有,那么是的 - 它应该关闭。
长时间打开连接通常是不好的做法,因为这会构成安全风险。 (有人可以将代码注入您的应用程序以重用打开的连接,做一些狡猾的事情)
using (SqlConnection cn = new SqlConnection(strConnectString))
{
// Stuff
}
我会确保您处理 windows 表单的 onClosing 事件,并告诉它显式处理 SqlConnection,或者至少尝试这样做。
安全总比后悔好。
注意 - 我听说可以在 SQLConnectionPool 中共享 SqlConnections。如果是这种情况,您可以修改连接字符串以禁用或启用 ConnectionPooling。
我创建了一个查询 db2 数据库和 returns 信息的小应用程序。我创建了一个 windows 表单,它接受输入和 returns 来自查询的信息。我的结束语是:
finally
{
conn.close();
}
我很好奇 -- 当我点击表单上的小红框时,连接 (conn) 是否真的关闭了?我在此处和网络上搜索了其他问题,但无法真正找到明确的答案。
这是完整的 try-catch-finally 块(有些信息被混淆了 --> *****):
`试试 {
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();
}`
如果连接由应用程序拥有,那么是的 - 它应该关闭。 长时间打开连接通常是不好的做法,因为这会构成安全风险。 (有人可以将代码注入您的应用程序以重用打开的连接,做一些狡猾的事情)
using (SqlConnection cn = new SqlConnection(strConnectString))
{
// Stuff
}
我会确保您处理 windows 表单的 onClosing 事件,并告诉它显式处理 SqlConnection,或者至少尝试这样做。 安全总比后悔好。
注意 - 我听说可以在 SQLConnectionPool 中共享 SqlConnections。如果是这种情况,您可以修改连接字符串以禁用或启用 ConnectionPooling。