C# 连接到数据库
这是一个相对简单的问题,但我想确保我的做法是正确的 连接到数据库的最佳实践是什么?这就是我目前的做法,我想确保这或多或少符合最佳实践C# 连接到数据库,c#,database,sqlite,database-connection,C#,Database,Sqlite,Database Connection,这是一个相对简单的问题,但我想确保我的做法是正确的 连接到数据库的最佳实践是什么?这就是我目前的做法,我想确保这或多或少符合最佳实践 private static SQLiteConnection conn; public static SQLiteConnection Conn { get { try { if (conn == null)
private static SQLiteConnection conn;
public static SQLiteConnection Conn
{
get
{
try
{
if (conn == null)
conn = new SQLiteConnection(fullName);
if (conn.State != ConnectionState.Open)
{
conn.ConnectionString = connectionString;
conn.Open();
}
}
catch (Exception Excp)
{
DataErrorLogger.WriteError(Excp, "");
}
return conn;
}
}
当我实际使用连接时,我正在这样做
using (SQLiteConnection conn = new SQLiteConnection(SQLiteConn.Conn))
{}
谢谢 查看Microsoft的SQLHelper类。可用于最佳做法数据库访问的It代码:
它处理所有连接,并有许多方法返回不同的数据对象。我们发现它非常有用。您应该重新抛出错误。否则,当您在代码中的任何地方使用Conn时,都会出现nullReference异常。在我看来,其他方面都没问题。SQLHelper当然可以给您一些好主意,但它是专门为MS Sql Server编写的,而不是您似乎正在使用的SqlLite。他们有几十种方法来做你想做的事,我认为这在很大程度上取决于形势 1) 考虑多线程。如果您没有使用它,那么可以忽略它,但要确保每个线程都在使用自己的连接。您可能还希望确保一次只能有一个线程调用您的SQLiteConnection。每次都返回一个新的conn,而不是使用类级静态conn 2) 使用连接池。这将有助于减少每次呼叫获得新连接的开销
3)考虑不改变(或不经常改变)但经常使用的缓存信息。 4) 尝试捕获一些更具体的异常类型,以便可以立即采取纠正措施。用户/通行证是否无效?这是安全例外吗?你没有足够的资源吗
5) 您应该重新抛出错误,或者根据错误(innerexception)抛出一个新的错误,以便调用函数知道它失败了6)考虑使用一些泛型类来帮助您编写上面的代码-它将更容易切换引擎或重用代码替代引擎(DB类或IDB接口)
7) 你使用的是单身汉,通常我建议人们避免他们,除非他们有充分的理由。我看到很多人滥用它们希望这能让你走上你想要的正确道路。如果没有,请回来寻求澄清或进一步帮助/在.NET中有许多连接数据库的方法。你当然找到了其中一个,它会很好的工作 关于.NET数据连接,我亲眼看到并亲身体验过三种主要的思想流派:
- 由于您将拥有数据行数组而不是整洁的数据集,因此编写代码更加困难
- 大多数情况下无法使用向导(某些向导仍与datarow阵列兼容)
- 我认为可以肯定地说,大多数刚开始编写代码的人都会看到它并说“wtf发生在这里?”
- 更多的网络流量
- 仅限顺序访问