我的问题是,什么是管理我们与MySQL db的C#连接的合适(最好的)方法。
嗯,目前我正在处理一些C# (WinForms类型) <-> MySQL应用程序,我一直在查看MySQL管理员中的服务器连接,见证了我的MySQL查询的执行,连接打开了一个关闭程序,……等等!在我的C#代码中,我是这样工作的,这就是一个例子:
public void InsertInto(string qs_insert)
{
try
{
conn = new MySqlConnection(cs);
conn.Open();
cmd = new MySqlCommand();
cmd.Connection = conn;
cmd.CommandText = qs_insert;
cmd.ExecuteNonQuery();
}
catch (MySqlException ex)
{
MessageBox.Show(ex.ToString());
}
finally
{
if (conn != null)
{
conn.Close();
}
}
}这意味着,每当我想在db表中插入某些内容时,我都会调用这个表并将insert查询字符串传递给此方法。建立连接,打开连接,执行查询,关闭连接。因此,我们可以得出结论,这就是我管理MySQL连接的方式。
对于我和我的观点,目前,这是可行的,它足以满足我的要求。
您有Java & Hibernate、C# &,我正在这样做:-/,这让我很困惑。我应该在实体框架中使用MySQL吗?
C#和MySQL之间的最佳协作方式是什么?我不想担心的是,我打开的连接已经关闭,同样的连接会更快,.
发布于 2012-11-16 13:59:45
我建议using
using(MySqlConnection conn = new MySqlConnetion(cs)
{
conn.open();
//setup and execute query
} //conn gets closed here在这里,一旦退出using块,连接就会关闭。
发布于 2012-11-16 17:10:09
规则是:尽可能晚开门。尽快接近。(实际上,您正在获取并放入连接池,但方法名称是打开/关闭的)。
您的代码片段是可以的,但是如果您想严格遵循规则,那么Open()就可以在ExecuteNonQuery()之前移动。
正如DFord所建议的,使用块在C#中是首选的。这是因为文体上的原因。这是一种基于范围的风格。您可以将资源(连接)处理得有点像普通的本地原语,如int、double等。当它们超出作用域时,一切都会自动清理。“使用”块由编译器转换为try/finally。
使用块是RAII的一个模拟。然而,这是一种模拟,而不是真实的东西。使用块是编写“尝试/捕捉”的一种语法糖。在真正的RAII中,您不必编写任何特殊的语法来获得堆栈pop效果,因为它是由文字堆栈控制的。RAII稍微安全一些,因为您不需要记住编写任何特殊的构造,如“使用”或“尝试”。
https://softwareengineering.stackexchange.com/questions/176085
复制相似问题