4

我是全新的 sql/数据库应用程序,正在尝试使用 Visual Studio 2015 C# 的简单联系人管理应用程序。我正在使用“SQL Express LocalDB”。我在谷歌上读到它是为了开发目的,但微软也提到它也可以用于生产目的。

我的问题是,当我从我的开发系统中试用应用程序时,应用程序第一次加载需要几秒钟,但之后每个查询都会快速运行。当我在我的朋友系统上尝试此操作时,每次尝试使用任何查询都需要时间。该数据库只有 20-30 条记录。

我使用“new SqlConnection”创建新连接,然后执行“new SqlCommand”创建的命令,并在执行查询后关闭连接。

这是我的应用程序中的代码片段

SqlConnection sqlConnection = new SqlConnection(@"Data Source = (LocalDB)\MSSQLLocalDB; AttachDbFilename = ""C:\ContactsDB.mdf""; Integrated Security = True; Connect Timeout = 30";);
SqlCommand sqlCmd = new SqlCommand();
sqlCmd.Connection = sqlConnection;

sqlCmd.CommandText = "SELECT Id, first_name, last_name from ContactsMaster ORDER BY first_name";
sqlConnection.Open();
SqlDataReader reader = sqlCmd.ExecuteReader();
try
{
    while (reader.Read())
    {
        ListViewItem lvi = new ListViewItem(reader["first_name"]);
        listViewItems.Add(lvi);
        lvi.SubItems.Add(reader[0].ToString());
    }
}
finally
{
    reader.Close();
}
sqlConnection.Close();

问:我应该在应用程序运行时一直保持连接打开吗?我认为这不应该被建议。好像应用程序崩溃数据库可能会损坏。

人们说LocalDB每隔新毫秒关闭连接的背景之一。那么我应该每隔几毫秒就对数据库进行一次 ping 操作吗?或者我根本不应该在生产中使用 localdb?

我想让应用程序对数据库先决条件的要求非常低。像 LocalDB 安装真的是无缝的。

我没有使用 SQL Server Express,Express 安装是否也像 LocalDB 一样无缝,我也可以在 Express 中使用类似 LocalDB 的连接字符串,直接给出 .mdf 文件名吗?

4

3 回答 3

1

localdb 具有自动关机功能。默认为 5 分钟。您可以将其设置为更高的值(即:12 小时)。最大值为 65535 分钟。

请参阅:如何防止 SQL Server LocalDB 自动关闭?

如果我没记错的话,sqlexpress autoshutdown 也是 1 小时。

我的电脑上的症状:

第一次打开慢 10-30 秒。如果我在低于 1 秒后立即重新打开应用程序。如果我等一会儿它又变慢了

于 2019-05-16T09:30:07.350 回答
0

ddbb 的性能需要考虑很多因素,这不是一个简单的问题。对于如此少量的记录,不应该存在性能问题。尝试将 ddbb 文件存储在与 OS 磁盘不同的另一个磁盘中,更好的是,将数据文件和日志文件也放在不同的磁盘中。关于您的问题,连接必须始终关闭并在 finally 块或 using 块内正确处理。Sql Express 安装非常简单,而且还使用了连接字符串,最大的不同是它可以跨网络使用。

于 2016-04-13T18:52:35.897 回答
0

最后转移到 SQLite,这比 SQLLocalDB 快得多。

于 2016-04-19T16:18:15.160 回答