gpt4 book ai didi

C# SQL Server脚本更改数据库问题

转载 作者:太空宇宙 更新时间:2023-11-03 22:17:56 26 4
gpt4 key购买 nike

我需要从我的 c# 应用程序运行一个文件中的 sql 脚本。问题是它创建对象并在不同的数据库上执行命令。

在脚本中,每次我需要更改当前数据库时,它都会使用命令

USE [数据库名称]

并且由于有很多对象创建,它多次使用 GO 命令,所以我读取文件直到找到 GO 命令并在数据库中运行该语句;到目前为止一切顺利,但在命令运行后,连接返回到默认数据库(在本例中为 master),忽略最后一个 USE 语句。

这是我用来读取文件和执行脚本的代码。

using (StreamReader reader = new StreamReader(databaseScriptFile))
{
DatabaseFactory.CreateDatabase()
Database db = new SqlDatabase(connectionstring);
txbuilder = new StringBuilder();
bool lastExecute = true;
while (!reader.EndOfStream)
{
text = reader.ReadLine();
if (text.Trim().ToUpper() != "GO")
{
lastExecute = false;
txbuilder.AppendLine(text);
}
else
{
lastExecute = true;
db.ExecuteNonQuery(CommandType.Text, txbuilder.ToString());
txbuilder.Length = 0;
}
}
//Make sure that the last sentence is executed
if (!lastExecute)
db.ExecuteNonQuery(CommandType.Text, txbuilder.ToString());
}

它似乎在每个执行 sp_reset_conection 的 ExecuteNonQuery 命令后清除连接(这就是我在探查器中得到的)

有没有优雅简单的方法来完成这个?

谢谢

最佳答案

有一个 good investigation by Joshua Flanagan在他的博客上有测试工具和结果。读起来好像他遇到了与您描述的类似的问题。

有两种方法可以做到这一点,您必须评估哪种方法最适合您,以及是否有任何链式 react 。

  1. 明确打开和关闭数据库连接。因此,您不仅需要使用 SqlDatabase 打开数据库,还需要创建一个 SqlConnection 并对其调用 Open()
  2. 只需将 Connection Reset=False 添加到您的连接字符串中。但是,我不知道这种方法的优缺点,所以不知道这是否有任何副作用,因为我知道这会禁用连接池。在您的应用程序/实用程序的上下文中,您会比我更了解。

我建议阅读 the blog article对于所有血淋淋的细节,然后进行一些挖掘,看看哪个最适合您。

关于C# SQL Server脚本更改数据库问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4351003/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com