c# - 使用 C# 在 SQL Server 上执行 sql 文件

标签 c# sql-server-2005 sql-server-2008 stored-procedures installation

我有很多过程、 View 、函数等文件。

我想在 SQL Server 2005/2008 上的适当数据库中执行这些文件(创建组件)。

还有一点是我想使用 C# 执行它们。

还有一点要提,我希望应用程序也能在远程 SQL Server 上执行这些文件。客户端机器也可能没有 osql、sqlcmd 命令工具。

有人可以指导我吗。

最佳答案

这取决于它们是什么类型的文件。例如,如果它们包含实际的 T-SQL 命令(并且不是您要在其中运行的 批处理 文件,例如 SSMS,它会包含一个批处理分隔符如 GO),那么你只需要创建一个连接,一个命令,然后读取文件的内容并使用它来填充命令的 CommandText 属性。

例如:

void ExecuteFile(string connectionString, string fileName)
{
    using(SqlConnection conn = new SqlConnection(connectionString))
    {
        string data = System.IO.File.ReadAllText(fileName);

        conn.Open();

        using(SqlCommand cmd = conn.CreateCommand())
        {
            cmd.CommandText = data;
            cmd.ExecuteNonQuery();
        }
    }
}

如果它是一个批处理文件,您需要将文件拆分成单独的批处理并单独处理这些文件。最简单的方法就是使用 string.Split,但请记住,它在拆分时不会遵守 SQL 解析规则(例如,如果 GO 出现在SQL 语句,它将把命令分成两批,这显然会失败)。

更一般地说,您可以通过以这种方式修改代码来了解您需要在此处执行的操作:

string[] batches = SplitBatches(System.IO.File.ReadAllText(fileName));

conn.Open();

using(SqlCommand cmd = conn.CreateCommand())
{
    foreach(string batch in batches)
    {
        cmd.CommandText = batch;
        cmd.ExecuteNonQuery();
    }
}

SplitBatches 函数的实现由您决定。

关于c# - 使用 C# 在 SQL Server 上执行 sql 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4808129/

相关文章:

c# - 尝试在 Debug模式下运行项目时出错,但是如果我运行EXE文件,则可以工作

sql - 需要制作一个 .bat 文件来停止然后重新启动 SQL Server 数据库

tsql - 需要一些 tSQL 巫术 : SQL Update Based on Running Total

java - Update() 方法不适用于 ORACLE 数据库

sql-server-2008 - SQL 触发器性能

c# - 正则表达式 : first character alphabet second onward numeric

c# - 选择基于列表检查的已检查列表框项目

c# - 更新表时发生 System.Data.SqlClient.SqlException

sql - SQL 查询中的条件Where 子句

sql - 如何检测和删除仅包含空值的列?