当数据库名称包含单引号时,Microsoft.SqlServer.Dac.DacServices->发布失败

时间:2017-12-12 11:40:24

标签: c# sql-server

我正在尝试使用Microsoft.SqlServer.Dac.DacServices-> Publish(..)方法发布/创建数据库,如下所示。

我的C#代码:

using (DacPackage dacpac = DacPackage.Load(dacpacStream, DacSchemaModelStorageType.Memory, FileAccess.Read))
{                    
    dacOptions.BackupDatabaseBeforeChanges = true;
    var result = dacServiceInstance.Publish(dacpac, databaseName, new PublishOptions { CancelToken = packageDeplyCancellationToken.Token, DeployOptions = dacOptions, GenerateDeploymentReport = true });
    dacServiceInstance.Register(databaseName, "Engage", dacpac.Version);
}

我的databaseName变量包含带有单引号的数据库名称  “Dileep的档案”。在这种情况下,Publish方法无法创建数据库并引发以下错误。 但是如果我手动尝试使用SQL Mangement studio中的单引号创建数据库,它就可以工作。

任何人都可以建议如何使用单引号创建数据库。

我试过逃避单引号,给另一个像“Dileep''Archive”,但现在它创建了带有2个单引号的数据库..

错误:

  

无法部署包。错误SQL72014:.Net SqlClient数据   提供者:Msg 102,Level 15,State 1,Line 2语法不正确   'Dileep的档案'。错误SQL72045:脚本执行错误。该   执行脚本:

IF (DB_ID(N'$(DatabaseName)') IS NOT NULL)
    BEGIN
        DECLARE @rc AS INT, @fn AS NVARCHAR (4000), @dir AS NVARCHAR (4000);
        EXECUTE @rc = [master].[dbo].[xp_instance_regread] N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'BackupDirectory', @dir OUTPUT, 'no_output';
        IF (@rc = 0)
            SELECT @dir = @dir + N'\';
        IF (@dir IS NULL)
            BEGIN
                EXECUTE @rc = [master].[dbo].[xp_instance_regread] N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'DefaultData', @dir OUTPUT, 'no_output';
                IF (@rc = 0)
                    SELECT @dir = @dir + N'\';
            END
        IF (@dir IS NULL)
            BEGIN
                EXECUTE @rc = [master].[dbo].[xp_instance_regread] N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\Setup', N'SQLDataRoot', @dir OUTPUT, 'no_output';
                IF (@rc = 0)
                    SELECT @dir = @dir + N'\Backup\';
            END
        IF

0 个答案:

没有答案
相关问题