AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-1852526

nikhil's questions

Martin Hope
nikhil
Asked: 2025-01-14 17:12:59 +0800 CST

C# 无法找到桌面上的快捷方式文件

  • 5

我创建了一个 Wix 安装程序项目,该项目安装在 C:\ProgramFiles 下,并创建了 (PharmSpec.exe) 的桌面快捷方式。我想使用一些 C# 代码删除桌面快捷方式上的此文件。我正在尝试按照帖子“删除桌面快捷方式”中提到的方法操作,但我找不到该文件。

我尝试了上述链接中的“PharmSpec.exe.lnk”、“PharmSpec.exe”和“PharmSpec.lnk”。但无论如何,我都找不到该文件。

我还尝试列出桌面上的所有文件,如下所示,但我看到的只有 3 个文件,desktop.ini,2 个其他文件,而不是这个文件。请忽略代码的编写方式,我只是在测试是否可以访问 PharmSpec 文件。

static void GetFiles()
        {
            string desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
            //string desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
            if (System.IO.File.Exists(Path.Combine(desktopPath, "PharmSpec.lnk")))
            {
              //NEVER COMES HERE
              //System.IO.File.Delete(Path.Combine(desktopPath , "shortcut.lnk"));
            }
            DirectoryInfo d = new DirectoryInfo(desktopPath); //Assuming Test is your Folder

            FileInfo[] Files = d.GetFiles("*"); //Changed search to *.exe still no use
            string str = "";

            foreach (FileInfo file in Files)
            {
                str = str + ", " + file.Name;
            }
            Console.Write(str);

        }

这是整个桌面的截图,

具有文件属性的桌面

我怎样才能删除桌面上的快捷方式文件。请帮忙。

c#
  • 2 个回答
  • 34 Views
Martin Hope
nikhil
Asked: 2024-11-29 16:10:26 +0800 CST

wix 安装程序无法执行 exe 包进行静默安装

  • 5

我正在尝试从 FTDI 驱动程序中执行 exe 文件的静默安装。我从这里获取这些驱动程序。下载后,当我使用 7-zip 进一步提取 .exe 时,它​​会创建一个包含 dll 和 dpinst-amd64.exe 的文件夹,如下面的屏幕截图所示。当我尝试命令时

dpinst-amd64.exe /q /se

在命令提示符下,它工作正常。但使用 Wix 安装程序执行此操作无法运行该包。但是其他包在此代码中安装正常。请帮忙。

FTDI 内容

这是我在 Bundle.wxs 中的内容

<Chain>

      <ExePackage Id="FTDIDriversInstaller"
                  SourceFile="$(var.DependencyFolder)\FTDIDrivers_Setup\dpinst-amd64.exe"
                  InstallCommand="/s /se"
                  Compressed="yes"/>
            <!--VC++ Redistributable required to ensure the ADE installer executes without errors-->
            <ExePackage Id="VCRedistributableInstaller"
                        SourceFile="$(var.DependencyFolder)\VC_redist.x64.exe"
                        InstallCommand="/quiet /norestart"
                        Compressed="yes" />
<ExePackage Id="VCRedistributable2010Installer"
                        SourceFile="$(var.DependencyFolder)\VCREDIST_2010_x64.exe"
                        InstallCommand="/quiet /norestart"
                        Compressed="yes" />
            <MsiPackage Id="LicenseGeneratorInstaller"
                        SourceFile="$(var.ReleaseFolder)\!(loc.CULTURE)\FactoryToolsInstall.msi"
                        Compressed="yes"
                        DisplayInternalUI="yes" />
            <ExePackage Id="AccessDatabaseEngineInstaller"
                        SourceFile="$(var.DependencyFolder)\AccessDatabaseEngine_X64.exe"
                        InstallCommand="/quiet"
                        Compressed="yes" />
                                
        </Chain>

这是我在日志文件中看到的内容:

  • [1740:173C][2024-11-29T12:25:25]i305:已验证获取的有效负载:FTDIDriversInstaller,路径为:C:\ ProgramData \ Package Cache.unverified \ FTDIDriversInstaller,移动到:C:\ ProgramData \ Package Cache \ A6D6831A4A097BD47AF267727A4AD6B38B14CDE3 \ dpinst-amd64.exe。
  • [1740:173C][2024-11-29T12:25:26]i304:已验证现有有效负载:VCRedistributableInstaller,路径为:C:\ ProgramData \ Package Cache \ BA92A00F0F55DCAE85C1BBD098EFE606BD080B3C \ VC_redist.x64.exe。
  • [1740:173C][2024-11-29T12:25:26]i304:已验证现有有效负载:VCRedistributable2010Installer,路径为:C:\ ProgramData \ Package Cache \027D0C2749EC5EB21B031F46AEE14C905206F482 \VCREDIST_2010_x64.exe。
  • [1740:173C][2024-11-29T12:25:29]i304:已验证现有有效负载:SQL2017Express,路径为:C:\ ProgramData \ Package Cache \ E0A5A388255244F1F5EB2FBF46BDC7292F7E3D8E \ Redist \ SQLEXPR_x64_ENU.exe。
  • [1740:173C][2024-11-29T12:25:30]i304:已验证现有有效负载:PharmSpecInstaller,路径为:C:\ ProgramData \ Package Cache{04E45023-61F9-47AB-8E79-D9A2FE234FC8}v3.5.33 \PharmSpec.msi。
  • [1740:173C][2024-11-29T12:25:33]i304:已验证现有有效负载:AccessDatabaseEngineInstaller,路径为:C:\ ProgramData \ Package Cache \ 277EA5EBCD18B8B98D82C9DC53399B4FE864CA51 \ AccessDatabaseEngine_X64.exe。
  • [1740:1748] [2024-11-29T12:25:33]i301:应用执行包:FTDIDriversInstaller,操作:安装,路径:C:\ ProgramData \ Package Cache \ A6D6831A4A097BD47AF267727A4AD6B38B14CDE3 \ dpinst-amd64.exe,参数:'“C:\ ProgramData \ Package Cache \ A6D6831A4A097BD47AF267727A4AD6B38B14CDE3 \ dpinst-amd64.exe”/ q / se'
  • [1740:1748] [2024-11-29T12:25:33] e000:错误 0x80000000:进程返回错误:0x80000000
  • [1740:1748][2024-11-29T12:25:33]e000:错误 0x80000000:无法执行 EXE 包。
  • [0F88:1444][2024-11-29T12:25:33]e000:错误 0x80000000:无法配置每台机器的 EXE 包。
  • [0F88:1444][2024-11-29T12:25:33]i319:已应用执行包:FTDIDriversInstaller,结果:0x80000000,重新启动:无
  • [0F88:1444][2024-11-29T12:25:33]e000:错误 0x80000000:无法执行 EXE 包。
  • [1740:1748][2024-11-29T12:25:33]i351:从路径 C:\ProgramData\Package Cache\A6D6831A4A097BD47AF267727A4AD6B38B14CDE3\ 删除缓存包:FTDIDriversInstaller
c#
  • 1 个回答
  • 28 Views
Martin Hope
nikhil
Asked: 2024-11-14 14:07:21 +0800 CST

使用 NoRecovery 选项从备份还原数据库时卡在恢复状态 [重复]

  • 5
此问题这里已有答案:
SQL Server 中的数据库处于恢复模式 (3 个答案)
13 小时前关闭。

我正在尝试从完整备份 ( .fbk) 和快速备份 ( .qbk) 中恢复数据库。按照该顺序,当涉及到

USE MASTER 
RESTORE DATABASE [" + DB_NAME + "] 
FROM DISK = \'" + BackupFile_Txt.Text + "\' WITH NORECOVERY";

语句,数据库停留在恢复状态。

当看到内部异常时,它说

数据库处于恢复状态时不允许 ALTER DATABASE
ALTER DATABASE 语句失败

当我打开 SSMS 时,数据库上显示“正在恢复”。

但是,当我仅尝试完整备份(.fbk)选项时,它可以正常恢复(在这种情况下使用“带恢复”)。

请参阅 WriteFile 方法中的 else if 条件。

private void WriteFile()
{
    try
    {
        // Creates Restore.sql file.
        string strTSQLFile = Environment.CurrentDirectory + "\\Restore.sql";
        FileInfo File = new FileInfo(strTSQLFile);

        StreamWriter Writer = File.CreateText();

        // Write open database  
        string strTemp;
        Writer.WriteLine("ALTER DATABASE [" + DB_NAME + "] SET SINGLE_USER WITH ROLLBACK IMMEDIATE");
        Writer.WriteLine("Go");

        if (Complete_Opt.Checked == true)           // Full restore
        {
            strTemp = "USE MASTER RESTORE DATABASE [" + DB_NAME + "] FROM DISK = \'" + BackupFile_Txt.Text + "\' WITH RECOVERY";
            Writer.WriteLine(strTemp);
        }
        else if (Differential_Opt.Checked == true)  // Quick restore
        {
            strTemp = "USE MASTER RESTORE DATABASE [" + DB_NAME + "] FROM DISK = \'" + BackupFile_Txt.Text + "\' WITH NORECOVERY";
            Writer.WriteLine(strTemp);
            Writer.WriteLine("GO");
            Writer.WriteLine("WAITFOR DELAY '00:00:10'");
            Writer.WriteLine("GO");
            Writer.WriteLine("ALTER DATABASE [" + DB_NAME + "] SET MULTI_USER");
            Writer.WriteLine("GO");
            Writer.WriteLine("ALTER DATABASE [" + DB_NAME + "] SET SINGLE_USER WITH ROLLBACK IMMEDIATE");
            Writer.WriteLine("Go");

            strTemp = "USE MASTER RESTORE DATABASE [" + DB_NAME + "] FROM DISK = \'" + txt_Quick.Text + "\' WITH RECOVERY";
            Writer.WriteLine(strTemp);
        }

        Writer.WriteLine("GO");
        Writer.WriteLine("ALTER DATABASE [" + DB_NAME + "] SET MULTI_USER");
        Writer.WriteLine("GO");

        Writer.WriteLine("USE PharmSpecDB");
        Writer.WriteLine("GO");

        Writer.WriteLine("IF EXISTS (SELECT * FROM sys.triggers WHERE name = 'D_TRG_TestResults')");
        Writer.WriteLine("BEGIN");
        Writer.WriteLine("DROP TRIGGER D_TRG_TestResults");
        Writer.WriteLine("END");
        Writer.WriteLine("GO");

        Writer.WriteLine("CREATE TRIGGER D_TRG_TestResults ON tblTestResults WITH ENCRYPTION INSTEAD OF DELETE AS BEGIN raiserror (50003,14,1)  END");
        Writer.WriteLine("GO");

        Writer.WriteLine("IF EXISTS (SELECT * FROM sys.triggers WHERE name = 'D_TRG_SampleIDParameter')");
        Writer.WriteLine("BEGIN");
        Writer.WriteLine("DROP TRIGGER D_TRG_SampleIDParameter");
        Writer.WriteLine("END");
        Writer.WriteLine("GO");

        Writer.WriteLine("CREATE TRIGGER D_TRG_SampleIDParameter ON tblSampleIDParameter WITH ENCRYPTION INSTEAD OF DELETE AS BEGIN raiserror (50003,14,1)   END");
        Writer.WriteLine("GO");

        Writer.WriteLine("IF EXISTS (SELECT * FROM sys.triggers WHERE name = 'D_TRG_TestRun')");
        Writer.WriteLine("BEGIN");
        Writer.WriteLine("DROP TRIGGER D_TRG_TestRun");
        Writer.WriteLine("END");
        Writer.WriteLine("GO");

        Writer.WriteLine("CREATE TRIGGER D_TRG_TestRun ON tblTestRun WITH ENCRYPTION INSTEAD OF DELETE AS BEGIN raiserror (50003,14,1) END");
        Writer.WriteLine("GO");

        Writer.WriteLine("IF EXISTS (SELECT * FROM sys.triggers WHERE name = 'D_TRG_ReviewApprove')");
        Writer.WriteLine("BEGIN");
        Writer.WriteLine("DROP TRIGGER D_TRG_ReviewApprove");
        Writer.WriteLine("END");
        Writer.WriteLine("GO");

        Writer.WriteLine("CREATE TRIGGER D_TRG_ReviewApprove ON tblReviewApprove WITH ENCRYPTION INSTEAD OF DELETE AS BEGIN raiserror (50003,14,1) END");
        Writer.WriteLine("GO");

        Writer.WriteLine("IF EXISTS (SELECT * FROM sys.triggers WHERE name = 'D_TRG_ActiveParamValues')");
        Writer.WriteLine("BEGIN");
        Writer.WriteLine("DROP TRIGGER D_TRG_ActiveParamValues");
        Writer.WriteLine("END");
        Writer.WriteLine("GO");

        Writer.WriteLine("CREATE TRIGGER D_TRG_ActiveParamValues ON tblActiveParamValues WITH ENCRYPTION INSTEAD OF DELETE AS BEGIN raiserror (50003,14,1) END");
        Writer.WriteLine("GO");

        Writer.WriteLine("IF EXISTS (SELECT * FROM sys.triggers WHERE name = 'D_TRG_ActivityLogger')");
        Writer.WriteLine("BEGIN");
        Writer.WriteLine("DROP TRIGGER D_TRG_ActivityLogger");
        Writer.WriteLine("END");
        Writer.WriteLine("GO");

        Writer.WriteLine("CREATE TRIGGER D_TRG_ActivityLogger ON tblActivityLogger WITH ENCRYPTION INSTEAD OF DELETE AS BEGIN raiserror (50003,14,1) END");
        Writer.WriteLine("GO");

        Writer.WriteLine("EXEC sp_revokedbaccess 'PharmSpecUsr'");
        Writer.WriteLine("EXEC sp_grantdbaccess  'PharmSpecUsr','PharmSpecUsr'");
        Writer.WriteLine("EXEC sp_addrolemember 'db_owner','PharmSpecUsr'");
        Writer.WriteLine("EXEC sp_addrolemember  'db_accessadmin','PharmSpecUsr'");
        Writer.WriteLine("EXEC sp_addrolemember  'db_datareader' ,'PharmSpecUsr'");
        Writer.WriteLine("EXEC sp_addrolemember 'db_datawriter ', 'PharmSpecUsr'");
        Writer.WriteLine("EXEC sp_addrolemember 'db_ddladmin', 'PharmSpecUsr'");
        Writer.WriteLine("EXEC sp_addrolemember 'db_securityadmin', 'PharmSpecUsr'");
        Writer.WriteLine("EXEC sp_addrolemember 'db_backupoperator','PharmSpecUsr'");
        Writer.WriteLine("GO");

        Writer.Close();
    }
    catch (Exception Exc)
    {
        throw Exc;
    }
}

我正在从 C# 代码执行此 SQL,如下所示:

try
{
    string strTSQLFile = Environment.CurrentDirectory + "\\Restore.sql";

    if (!File.Exists(strTSQLFile))
    {
        throw new FileNotFoundException();
    }

    using (StreamReader srSQL = new StreamReader(strTSQLFile))
    {
        string sqlLine;
        StringBuilder sqlString = new StringBuilder();

        while (!srSQL.EndOfStream)
        {
            sqlLine = srSQL.ReadLine();

            if (string.IsNullOrEmpty(sqlLine) == false)
            {
                // We don't actually execute the "GO" lines but can use them to determine when to call the executenonquery function
                if (string.Compare(sqlLine, "GO", true) == 0)
                {
                    // Make sure we have something to execute
                    if (string.IsNullOrEmpty(sqlString.ToString()) == false)
                    {
                        ServerActionResult.ConnectionContext.ExecuteNonQuery(sqlString.ToString());
                        System.Diagnostics.Debug.WriteLine(sqlString);
                    }

                    sqlString.Clear();
                }
                // Add the next line to the stringbuilder object
                else
                {
                    sqlString.AppendLine(sqlLine);
                }
            }
        }
    }
}
catch (Exception exc)
{
    throw exc;
}

调试:

当说它System.Diagnostics.Debug.WriteLine(sqlString);打印时:

ALTER DATABASE [PharmSpecDB] SET SINGLE_USER WITH ROLLBACK IMMEDIATE 

USE MASTER RESTORE DATABASE [PharmSpecDB] FROM DISK = 'C:\PharmBackup\Backup\PharmSpecDB_13-Nov-2024-12-42-57-717_Full.Fbk' WITH NORECOVERY
 WAITFOR DELAY '00:00:10'
                                                

编辑:

有了这个评论和网上的说法“要恢复数据库并使其联机以便用户可以连接,您可以使用带有 WITH RECOVERY 选项的 RESTORE DATABASE 语句”。我正在尝试这样的事情,

strTemp = "USE MASTER RESTORE DATABASE [" + DB_NAME + "] FROM DISK = \'" + BackupFile_Txt.Text + "\' WITH NORECOVERY";
Writer.WriteLine(strTemp);
Writer.WriteLine("Go");
 strTemp = "USE MASTER RESTORE DATABASE [" + DB_NAME + "] FROM DISK = \'" + txt_Quick.Text + "\' WITH RECOVERY";
Writer.WriteLine(strTemp);
Writer.WriteLine("Go");

这样做就是抱怨,

“无法还原日志或差异备份,因为没有文件准备好前滚。\r\nRESTORE DATABASE 异常终止。\r\n已将数据库上下文更改为‘master’。”

c#
  • 1 个回答
  • 40 Views
Martin Hope
nikhil
Asked: 2024-11-08 17:29:33 +0800 CST

删除旧包后,Wix 不会安装新的 exe 包

  • 5

我正在尝试卸载 SqlServer 2017 并安装 SqlServer 2022。它正在卸载 SqlServer 2017,但从不安装 2022。请帮忙。

我有一个名为 RemoveSql2017.cs 的类,如下所示:

 public class RemoveSQL2017
    {
        const string UNINSTALL_SQL_2017 = "/Action=Uninstall /INSTANCENAME=PHARMSPEC /FEATURES=SQL /QS /HIDECONSOLE";
        const string sqlFile = "DetachPharmSpecDB.sql";
        const string DB_INSTANCE = "PHARMSPEC";
        const int COMMAND_LINE_WAIT = 10000;
        private static WixBootstrapper _bootstrapper;
        const string registryKey = @"SOFTWARE\HIAC\PharmSpec\Database";
        const string subKeyValue = "DataPath";

        public RemoveSQL2017(WixBootstrapper bootstrapper)
        {
            _bootstrapper = bootstrapper;
        }

        public void Remove(string bootStrapFolder, string dataFilePath)
        {
            CreateDetachSQLFile();
            CopyFiles(dataFilePath);
            UninstallSQL(bootStrapFolder);
            DeleteDBRegistryPath();
        }
        public static void UninstallSQL(string bootstrapFolder)
        {
            try
            {
                _bootstrapper.Engine.Log(LogLevel.Verbose, "Beginning UninstallSQL; bootstrapFolder=" + bootstrapFolder);
                Process process = new Process();
                ProcessStartInfo startInfo = new ProcessStartInfo(bootstrapFolder + "//SQL2017//setup.exe", UNINSTALL_SQL_2017);
                process.StartInfo = startInfo;
                process.Start();
                process.WaitForExit();
                _bootstrapper.Engine.Log(LogLevel.Verbose, "Completing UninstallSQL; bootstrapFolder=" + bootstrapFolder);
            }
            catch (Exception e)
            {
                _bootstrapper.Engine.Log(LogLevel.Verbose, "Error in UninstallSQL:\n " + e.ToString());
                throw (e);
            }
        }
        public static void CopyFiles(string dataFilePath)
        {
            try
            {
                _bootstrapper.Engine.Log(LogLevel.Verbose, "Beginning CopyFiles; dataFilePath=" + dataFilePath + "  tempDBFilePath=" + Globals.tempDBFilePath);
                File.Copy(Path.Combine(dataFilePath, Globals.MDF_FILE), Path.Combine(Globals.tempDBFilePath, Globals.MDF_FILE));
                File.Copy(Path.Combine(dataFilePath, Globals.LDF_FILE), Path.Combine(Globals.tempDBFilePath, Globals.LDF_FILE));
                _bootstrapper.Engine.Log(LogLevel.Verbose, "Completing CopyFiles; dataFilePath=" + dataFilePath + "  tempDBFilePath=" + Globals.tempDBFilePath);
            }
            catch (Exception e)
            {
                _bootstrapper.Engine.Log(LogLevel.Verbose, "Error in CopyFiles:\n " + e.ToString());
            }
        }
        public static void DetachDB(string sqlFilePath)
        {
            try
            {
                _bootstrapper.Engine.Log(LogLevel.Verbose, "Beginning DetachDB; sqlFilePath=" + sqlFilePath);
                string command = string.Format("-S .\\{0} -E -i \"{1}\"", DB_INSTANCE, sqlFilePath);
                ProcessStartInfo info = new ProcessStartInfo("sqlcmd", command);
                info.UseShellExecute = false;
                info.CreateNoWindow = false;
                info.WindowStyle = ProcessWindowStyle.Hidden;
                Process proc = new Process();
                proc.StartInfo = info;
                proc.StartInfo.RedirectStandardOutput = true;
                proc.Start();
                string outputD = proc.StandardOutput.ReadToEnd();
                if (proc.WaitForExit(COMMAND_LINE_WAIT))
                {
                    _bootstrapper.Engine.Log(LogLevel.Verbose, outputD);
                }
                else
                {
                    _bootstrapper.Engine.Log(LogLevel.Verbose, "Process timeout in DetachDb");
                }
                _bootstrapper.Engine.Log(LogLevel.Verbose, "Completing DetachDB; sqlFilePath=" + sqlFilePath);
            }
            catch (Exception e)
            {
                _bootstrapper.Engine.Log(LogLevel.Verbose, "Error in DetachDB:\n " + e.ToString());
                throw (e);
            }
        }
        public static void CreateDetachSQLFile()
        {
            try
            {
                string sqlFilePath = Path.Combine(Path.GetTempPath(), sqlFile);
                var sqlScript = new StringBuilder();
                sqlScript.AppendLine("GO");
                sqlScript.AppendLine("IF EXISTS (SELECT * FROM sysdatabases WHERE name = N'PharmSpecDB')");
                sqlScript.AppendLine("use PharmSpecDB");
                sqlScript.AppendLine("DROP SCHEMA PharmSpecUsr");
                sqlScript.AppendLine("DROP USER PharmSpecUsr");
                sqlScript.AppendLine("use master");
                sqlScript.AppendLine("EXEC sp_detach_db 'PharmSpecDB'");
                sqlScript.AppendLine("GO");
                sqlScript.AppendLine("IF EXISTS (SELECT * FROM syslogins WHERE name = N'PharmSpecUsr')");
                sqlScript.AppendLine("DROP LOGIN PharmSpecUsr");
                sqlScript.AppendLine("GO");
                using (StreamWriter sw = new StreamWriter(sqlFilePath))
                {
                    sw.Write(sqlScript.ToString());
                }
                DetachDB(sqlFilePath);
            }
            catch (Exception e)
            {
                _bootstrapper.Engine.Log(LogLevel.Verbose, "error in CreateDetachSQLFile:\n " + e.ToString());
                throw (e);
            }
        }

        public static void DeleteDBRegistryPath()
        {
            try
            {
                using (RegistryKey key = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64))
                {
                    RegistryKey subkey = key.OpenSubKey(registryKey, true);
                    if (subkey != null)
                    {
                        subkey.DeleteValue(subKeyValue);
                    }           
                }
            }
            catch (Exception e)
            {
                _bootstrapper.Engine.Log(LogLevel.Verbose, "error in DeleteDBRegistryPath:\n" + e.ToString());
            }
        }

我按如下方式调用此类:我能够看到 SqlServer 2017 被卸载。

 if (Bootstrapper.Engine.StringVariables["PreviousVersion"].CompareTo("3.5.99") <= 0 &&
               Bootstrapper.Engine.StringVariables["SqlInstanceKeyFound64"] == "1")
                {
                    RemoveSQL2017 removeSQL = new RemoveSQL2017(Bootstrapper);
                    removeSQL.Remove(Bootstrapper.Engine.StringVariables["DB2017SETUP"], Bootstrapper.Engine.StringVariables["2017DBDataPath"]);
                    Bootstrapper.Engine.StringVariables["OLDDBDATAPATH"] = Globals.tempDBFilePath;
                    Bootstrapper.Engine.StringVariables["INSTALLSQL"] = "1";
                }

我有一个 SqlServer.wxi,其中的注册表项和 exe 文件如下。在删除 SqlServer2017 之前,注册表中的内容如下,

註冊

sqlserver.wxi

<Variable Name="SqlInstanceKeyFound" Value="0"/>
        <Variable Name="SqlInstanceKeyFound64" Value="0"/>
<util:RegistrySearch
          Id="SqlInstanceKeyFound64"
          Root="HKLM" Key="SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL" Value="PHARMSPEC"
          Result="exists" Variable="SqlInstanceKeyFound64" Win64="yes"/>
        <util:RegistrySearch
          Id="SqlInstanceKey64"
          Root="HKLM" Key="SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL" Value="PHARMSPEC"
          Variable="SqlInstanceKey64" After="SqlInstanceKeyFound64" Condition="SqlInstanceKeyFound64" Win64="yes" />
        <util:RegistrySearch
          Id="SqlInstanceFound64"
          Root="HKLM" Key="SOFTWARE\Microsoft\Microsoft SQL Server\[SqlInstanceKey64]"
          Result="exists" Variable="SqlInstanceFound64" After="SqlInstanceKey64" Condition="SqlInstanceKeyFound64" Win64="yes" />
        <util:RegistrySearch
          Id="SqlVersion64"
          Root="HKLM" Key="SOFTWARE\Microsoft\Microsoft SQL Server\[SqlInstanceKey64]\Setup" Value="Version"
          Variable="SqlVersion64" After="SqlInstanceKey64" Condition="SqlInstanceFound64" Win64="yes" />

 <PackageGroup Id="SQL2022Express">
      <ExePackage Id="SQL2022Express"
              DisplayName="SQL Server 2022 Express"
              Cache="yes"
              Compressed="no"
              PerMachine="yes"
              Permanent="no"
              Vital="yes"
              DetectCondition="SqlInstanceFound64"
              InstallCondition="INSTALLSQL=1"
              Name="Redist\SQLEXPR_x64_!(loc.LANG).exe"
              SourceFile="$(var.DependencyFolder)\SQLEXPR_x64_!(loc.LANG).exe"
              InstallCommand="/ACTION=Install /IACCEPTSQLSERVERLICENSETERMS [SQLQUIET] /HIDECONSOLE /FEATURES=SQLEngine /UpdateEnabled=0 /INSTANCENAME=PHARMSPEC /SQLSYSADMINACCOUNTS=Builtin\Administrators /SQLSVCACCOUNT=&quot;NT AUTHORITY\NETWORK SERVICE&quot; /SECURITYMODE=SQL /SAPWD=[SAPASSWORD] /NPENABLED=1 /TCPENABLED=1 /SKIPRULES=RebootRequiredCheck"
              UninstallCommand="/Action=Uninstall /INSTANCENAME=PHARMSPEC /FEATURES=SQL /QS /HIDECONSOLE">
        <ExitCode Value ="3010" Behavior="forceReboot" />
      </ExePackage>
    </PackageGroup>

日志中显示以下内容:

  • [0EE8:0EEC][2024-11-08T14:09:13]i000:将数字变量“SqlInstanceFound64”设置为值 1
  • [0EE8:0EEC][2024-11-08T14:09:13]i052:条件“SqlInstanceFound”计算结果为假。
  • [0EE8:0EEC][2024-11-08T14:09:13]i052:条件“SqlInstanceFound64”计算结果为真。
  • [0EE8:0EEC][2024-11-08T14:09:13]i000:将字符串变量“SqlVersion64”设置为值“14.0.1000.169”
  • [0EE8:0EEC][2024-11-08T14:09:13]i101:检测到的包:SQL2022Express,状态:存在,缓存:无
  • [0EE8:0EEC][2024-11-08T14:09:29]i052:条件“INSTALLSQL = 1”计算结果为真。
  • [0EE8:0EEC][2024-11-08T14:09:29]w321:跳过没有依赖提供程序的包的依赖项注册:SQL2022Express
  • [0EE8:0EEC][2024-11-08T14:09:29]i052:条件“INSTALLSQL = 0”计算结果为假。
wix
  • 1 个回答
  • 11 Views
Martin Hope
nikhil
Asked: 2024-10-09 23:53:42 +0800 CST

ExecuteNonQuery 抛出异常“SQL 数据库执行查询失败。SQL Server 可能未运行”

  • 5

我正在尝试通过调用来执行 SQL 脚本文件

ExecuteNonQuery(somefile.sql) 

我得到了一个例外

SQL 数据库执行查询失败。SQL 服务器可能未运行

请帮忙。

我有一个在 C# 中执行一些文件的方法.sql。执行第一个文件时,它确实工作正常。但是当它尝试执行下一个文件时(请参阅ExecuteFileBasedOnSequence方法中的 else 条件),它会引发异常。我尝试在 SQL Server 上执行 SQL 脚本,它工作正常。

编辑:

这是内部异常:

错误 [42000] [Microsoft][ODBC SQL Server 驱动程序][SQL Server]“Go”附近的语法不正确

但是该脚本在 SQL Server 上运行时运行良好。

以下是 C# 代码:

private void ExecuteFileBasedOnSequence(string fileToExecute, bool executeSQLBySequence = true)
{
    m_DBConnection.BeginTransaction();

    if (executeSQLBySequence)
    {
        // Read each line of the file into a stringbuilder object to be executed individually (may throw, should just pitch out of this function)
        using (StreamReader srSQL = new StreamReader(fileToExecute))
        {
            // Read each line of the file into a stringbuilder object to be executed individually (may throw, should just pitch out of this function)
            string sqlLine;

            StringBuilder sqlString = new StringBuilder();

            while (!srSQL.EndOfStream)
            {
                sqlLine = srSQL.ReadLine();

                if (string.IsNullOrEmpty(sqlLine) == false)
                {
                    // We don't actually execute the "GO" lines but can use them to determine when to call the executenonquery function
                    if (string.Compare(sqlLine, "GO", true) == 0)
                    {
                        // Make sure we have something to execute
                        if (string.IsNullOrEmpty(sqlString.ToString()) == false)
                        {
                            m_DBConnection.ExecuteNonQuery(sqlString.ToString());
                        }

                        sqlString.Clear();
                    }
                    // Add the next line to the stringbuilder object
                    else
                    {
                        sqlString.AppendLine(sqlLine);
                    }
                }
            }
        }
    }
    else
    {
        using (StreamReader srSQL = new StreamReader(fileToExecute))
        {
            if (m_DBConnection != null)
            {
                m_DBConnection.Open();
                m_DBConnection.ExecuteNonQuery(srSQL.ReadToEnd()); //THIS ONE FAILS.
            }
        }
    }

    m_DBConnection.CommitTransaction();
}

我调用这些函数如下:

// This one works 
ExecuteFileBasedOnSequence(@"Database\UpdateTriggersToSQL2017.sql");

// This one is failing    
ExecuteFileBasedOnSequence(@"Database\UpgradePharmSpecScripts.sql", false); 

这是失败的 SQL 文件 ( UpgradePharmSpecScripts.sql):

Use PharmSpecDB
Go

--PC1725E-590

IF NOT EXISTS ( SELECT 23 FROM [PharmSpecDB].[dbo].[tblActivityLogMaster] WHERE Lower(strActivityLog) Like 'user rights%' AND LOWER(strActivityLogDesc) Like 'user rights%')
Begin
ALTER TABLE [PharmSpecDB].[dbo].[tblActivityLogMaster] DISABLE TRIGGER I_TRG_ACTIVITYLOGMASTER  
Insert into [PharmSpecDB].[dbo].[tblActivityLogMaster](strActivityLog,bDeleted,strActivityLogDesc) values ('User rights modified', 0, 'User rights modified')
ALTER TABLE [PharmSpecDB].[dbo].[tblActivityLogMaster] ENABLE TRIGGER I_TRG_ACTIVITYLOGMASTER
End

编辑:按照建议,我删除了脚本中该行Go之后的内容,但出现新的错误:Use PharmSpec

ExecuteNonQuery:命令文本属性尚未初始化

c#
  • 1 个回答
  • 77 Views
Martin Hope
nikhil
Asked: 2023-09-19 22:09:35 +0800 CST

Pandas 在 Excel 中的每行后面插入一个空白行[重复]

  • 5
这个问题在这里已经有了答案:
Python pandas 在每行后插入空行 (6 个答案)
9 小时前关闭。

首先是熊猫新手。我正在使用以下代码使用 Pandas 写入 Excel 文件。请看行worksheet.write(0, col_num, value, header_format)。问题是,如何在每行后面插入一个空白行。例如我想要类似的东西

Col1 Col2 Col3 Col4   (This is the Header)
--------------Blank row
C1    C2   C3   C4
--------------Blank row
C1    C2   C3   C4
--------------Blank row
C1    C2   C3   C4

这就是我所拥有的

def create_excel_with_format(headers,values,full_file_name_with_path):
   
   df = pd.DataFrame(data=values,columns=headers)
   with pd.ExcelWriter(full_file_name_with_path) as writer:
       df.to_excel(writer, index=False)

   workbook  = writer.book
   worksheet = writer.sheets['Sheet1']
   #font_fmt = workbook.add_format({'font_name': 'Arial', 'font_size': 10})
   header_format = workbook.add_format({
        'bold': False,
        'border': False,
        'text_wrap': True})
   
   for col_num, value in enumerate(df.columns.values):
        worksheet.write(0, col_num, value, header_format)

   font_fmt = workbook.add_format({'font_name': 'Arial', 'font_size': 13})
   worksheet.set_row(0, None, font_fmt)
python
  • 1 个回答
  • 33 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    重新格式化数字,在固定位置插入分隔符

    • 6 个回答
  • Marko Smith

    为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会?

    • 2 个回答
  • Marko Smith

    VScode 自动卸载扩展的问题(Material 主题)

    • 2 个回答
  • Marko Smith

    Vue 3:创建时出错“预期标识符但发现‘导入’”[重复]

    • 1 个回答
  • Marko Smith

    具有指定基础类型但没有枚举器的“枚举类”的用途是什么?

    • 1 个回答
  • Marko Smith

    如何修复未手动导入的模块的 MODULE_NOT_FOUND 错误?

    • 6 个回答
  • Marko Smith

    `(表达式,左值) = 右值` 在 C 或 C++ 中是有效的赋值吗?为什么有些编译器会接受/拒绝它?

    • 3 个回答
  • Marko Smith

    在 C++ 中,一个不执行任何操作的空程序需要 204KB 的堆,但在 C 中则不需要

    • 1 个回答
  • Marko Smith

    PowerBI 目前与 BigQuery 不兼容:Simba 驱动程序与 Windows 更新有关

    • 2 个回答
  • Marko Smith

    AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String”

    • 1 个回答
  • Martin Hope
    Fantastic Mr Fox msvc std::vector 实现中仅不接受可复制类型 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant 使用 chrono 查找下一个工作日 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor 构造函数的成员初始化程序可以包含另一个成员的初始化吗? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský 为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul C++20 是否进行了更改,允许从已知绑定数组“type(&)[N]”转换为未知绑定数组“type(&)[]”? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann 为什么 {2,3,10} 和 {x,3,10} (x=2) 的顺序不同? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller 在 5.2 版中,bash 条件语句中的 [[ .. ]] 中的分号现在是可选的吗? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench 为什么双破折号 (--) 会导致此 MariaDB 子句评估为 true? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng 为什么 `dict(id=1, **{'id': 2})` 有时会引发 `KeyError: 'id'` 而不是 TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String” 2024-03-20 03:12:31 +0800 CST

热门标签

python javascript c++ c# java typescript sql reactjs html

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve