我正在用C#编写一个类库作为另一个提供API的应用程序的附加组件。本质上,应用程序设置为在更改应用程序中的特定文本字段时执行我的类库中的代码。我发现在更改该字段一次后,更改任何其他文本字段也会触发我的代码运行,我无法弄清楚原因。
类库具有由应用程序执行的功能。基本上,我正在连接到SQL数据库,调用Windows窗体来显示,然后处理所有内容。我发现通过删除SqlConnection,问题不会发生。
任何想法都会非常感激。
SqlConnection myConnection;
myConnection = new SqlConnection("user id=" + Username + ";" +
"password=" + Password + ";" +
"server=" + Server + ";" +
"database=" + DBName + ";" +
"connection timeout=" + ConnectionTimeout + ";"
);
myConnection.Open();
string currentValue = htableData["Test"].ToString().Trim();
if (!(String.IsNullOrEmpty(currentValue)))
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Form1 form = new Form1();
Application.Run(form);
form.Dispose();
}
myConnection.Dispose();
答案 0 :(得分:0)
任何想法都会非常感激。
这不是您所询问的,但明确调用Dispose
不是一个好习惯。最好使用using
块。
SqlConnection connection;
using (connection = ... ) {
// use the connection
} // connection is automatically disposed (and error handling is done for you)
理想情况下,您还应该在form
答案 1 :(得分:0)
using(SqlConnection myConnection = new SqlConnection(
"user id=" + Username + ";" +
"password=" + Password + ";" +
"server=" + Server + ";" +
"database=" + DBName + ";" +
"connection timeout=" + ConnectionTimeout + ";")
){
myConnection.Open();
string currentValue = htableData["Test"].ToString().Trim();
if (!(String.IsNullOrEmpty(currentValue)))
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Form1 form = new Form1();
Application.Run(form);
form.Dispose();
}
myConnection.Close();
}
答案 2 :(得分:0)
您没有提供足够的代码来说明它被调用两次的原因。但我确实有几点意见。
这不是在已经显示其他UI元素的应用程序中显示表单的正确方法。正确的方法是form.Show()
或form.ShowDialog()
。我想你的情况就是后者。避免同时致电EnableVisualStyles
和SetCompatibleTextRenderingDefault
。
为了确保正确处理事物(特别是在发生异常时),您可以使用using语句,即使我不认为这是您的问题的原因。这是一个很好的展示:Understanding the 'using' statement in C#
同样,它不会解决您的问题,但更优雅的创建连接字符串的方法是使用SqlConnectionStringBuilder
,而不是连接字符串。方法如下:How to use SqlConnectionStringBuilder in C#