C# restore database and create user

Godot C#工程化开发:Nuget包管理与项目模板搭建实战 在游戏开发中,依赖管理和项目结构规范化是提升工程效率和代码质量的基础。通过引入成熟的包管理机制,开发者可以便捷地集成日志、数据库、数学计算等通用功能库,避免重复造轮子,并确保依赖版本的一致性。其技术价值在于构建可维护、可协作的代码基座,为长期项目迭代奠定基础。这一实践在需要结构化日志记录、本地数据存储或复杂随机数生成的游戏项目中尤为关键。本文以Godot引擎的C#开发为例,详细阐述了如何利用Nuget生态集成Serilog、Dapper等热词库,并创建可复用的项目模板,从而将Godot C#项目升级为具备工 阅读详情
using System;
using System.IO;
using System.Runtime.InteropServices;
using System.Text;
using System.Data.SqlClient;
using System.Data;
namespace RestoreDatabase
{
    
public class IniFile
    
{
        
private string bakFileName = string.Empty;
        
private string bakfileNmNotExtension = string.Empty;
        
public string Path;
        
////声明读写INI文件的API函数 
        [DllImport("kernel32")]
        
private static extern long WritePrivateProfileString(string section, string key, string val, string filePath);
        [DllImport(
"kernel32")]
        
private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath);

        
//类的构造函数,传递INI文件名
        public IniFile(string inipath)
        
{
            Path 
= inipath;
        }


        
//写INI文件
        public void IniWriteValue(string Section, string Key, string Value)
        
{
            WritePrivateProfileString(Section, Key, Value, 
this.Path);
        }


        
//读取INI文件指定
        public string IniReadValue(string Section, string Key)
        
{
            StringBuilder temp 
= new StringBuilder(255);
            
int i = GetPrivateProfileString(Section, Key, "", temp, 255, this.Path);
            
return temp.ToString();
        }

        
public string bakFileNm
        
{
            
get { return this.bakFileName; }
            
set { this.bakFileName = value; }
        }

        
public string bakFileNmNotExn
        
{
            
get { return this.bakfileNmNotExtension; }
            
set { this.bakfileNmNotExtension = value; }
        }

        
public Boolean JudgementNotExist(string sql, string tableNm,ref SqlConnection conn, ref DataSet ds, ref SqlDataAdapter da)
        
{
            
try
            
{
                ds.Tables.Clear();
                da.SelectCommand 
= new SqlCommand(sql,conn);
                da.Fill(ds, tableNm);
                
if (ds.Tables[0].Rows.Count == 0)
                    
return true;
                
else
                    
return false;
            }

            
catch (Exception e)
            
{ throw e; }
        }

    }

}

 Program.cs
using System;
using System.Collections.Generic;
using System.Text;
using System.Data.SqlClient;
using System.Data;
using System.Reflection;
using System.IO;

namespace RestoreDatabase
{
    
class Program
    
{
        
public static void Main(string[] args)
        
{
            
string ServerName, MSSQLDB, UsrId, UsrPwd, InifilePath, SysPath, ExistDBsql, restoreSql, CreateDBSql;
            
string CreateLogin, CreateUser, CreateAlter, AddRole, ExistLogins,ExistUser;

            
try
            
{
                
//get database info from 'database.ini' file
                InifilePath = Environment.CurrentDirectory + "/Setup/Database/databaseInfo.ini";
                IniFile ini 
= new IniFile(InifilePath);
                
//ServerName = ini.IniReadValue("Database", "ServerName");
                MSSQLDB = ini.IniReadValue("Database", "MSSQLDB");
                UsrId 
= ini.IniReadValue("Database", "USRID");
                UsrPwd 
= ini.IniReadValue("Database", "USRPWD");
                
//get '.bak' file from currentDirectory
                DirectoryInfo dir = new DirectoryInfo(Environment.CurrentDirectory + "/Setup/Database/");
                
foreach (FileInfo fileinfo in dir.GetFiles("*.bak"))
                
{
                    
if (fileinfo.Extension == ".bak")
                    
{
                        ini.bakFileNm 
= fileinfo.Name;
                        ini.bakFileNmNotExn 
= fileinfo.Name.Replace(fileinfo.Extension, "").Trim();
                    }

                }

                SysPath 
= Environment.CurrentDirectory + "/Setup/Database/" + ini.bakFileNm;
                ExistDBsql 
= "SELECT 1 FROM master..sysdatabases  WHERE name='" + ini.bakFileNmNotExn + "'";
                restoreSql 
= "RESTORE DATABASE " + MSSQLDB + " FROM DISK='" + SysPath + "' WITH REPLACE";
                CreateDBSql 
= "CREATE DATABASE " + MSSQLDB + " ";
                CreateLogin 
= "EXEC master.dbo.sp_addlogin @loginame = N'" + UsrId + "', @passwd = N'" + UsrPwd + "'";
                
//CreateLogin = "CREATE LOGIN [" + UsrId + "] WITH PASSWORD=N'" + UsrPwd + "', DEFAULT_DATABASE=[master], " +
                
//                    "DEFAULT_LANGUAGE= [us_english], CHECK_EXPIRATION=ON, CHECK_POLICY=ON ";
                CreateUser = "CREATE USER [" + UsrId + "] FOR LOGIN [" + UsrId + "] ";
                CreateAlter 
= "ALTER USER [" + UsrId + "] WITH DEFAULT_SCHEMA=[dbo] ";
                AddRole 
= "EXEC sp_addrolemember N'db_owner', N'" + UsrId + "' ";
                ExistLogins 
= "SELECT 1 FROM master..syslogins where name='" + UsrId + "'";
                ExistUser
="select * from  sysusers where name='" + UsrId + "'";

                SqlConnection conn 
= new SqlConnection("server=localhost;uid=sa;pwd=as;");
                SqlCommand comm 
= new SqlCommand();
                comm.Connection 
= conn;
                conn.Open();
                DataSet ds 
= new DataSet();
                SqlDataAdapter da 
= new SqlDataAdapter(ExistDBsql, conn);
                
if (ini.JudgementNotExist(ExistDBsql, "sysdatabases", ref conn, ref ds, ref da))
                
{
                    Console.WriteLine(
"Creating Database...");
                    comm.CommandText 
= CreateDBSql;
                    comm.ExecuteNonQuery();
                    Console.WriteLine(
"Create Database Complete.");
                }

                Console.WriteLine(
"Restoring Database...");
                comm.CommandText 
= restoreSql;
                comm.ExecuteNonQuery();
                Console.WriteLine(
"Restore Database Complete.");

                Console.WriteLine(
"Creating Database User ...");
                comm.Connection.ChangeDatabase(
"master");
                
if (ini.JudgementNotExist(ExistLogins, "sysdatabases", ref conn, ref ds, ref da))
                
{
                    comm.CommandText 
= CreateLogin;
                    comm.ExecuteNonQuery();
                }

                comm.Connection.ChangeDatabase(ini.bakFileNmNotExn);
                
if (ini.JudgementNotExist(ExistUser, "sysdatabases", ref conn, ref ds, ref da))
                
{
                    comm.CommandText 
= CreateUser;
                    comm.ExecuteNonQuery();
                    comm.CommandText 
= CreateAlter;
                    comm.ExecuteNonQuery();
                    comm.CommandText 
= AddRole;
                    comm.ExecuteNonQuery();
                }

                Console.WriteLine(
"Create Database User Complete");
            }

            
catch (Exception e)
            
{
                Console.WriteLine(e.ToString());
                Console.WriteLine();
                Console.WriteLine(
"We are sorry for the inconvenience caused to you.");
                Console.WriteLine(
"You will receive an email from us to help you find what you need.");
                Console.ReadLine();
            }

        }



    }

}

PS:注意,因为CommadTimeOut(即等待命令执行的时间)默认为30秒,如果你的数据库足够大的话,必须重新设置该值。不然将出现TimeOut警告
数据库国产化探究及升级改造过程指导 当前官网最新版本为DM8,相较于目前主流产品架构:不同特性依靠不同内核去实现,DM8独特采用了双存储引擎架构,行存储引擎和列存储引擎可相互配合、协同工作。同时实现了计算层和存储层的分离,同一内核既支持共享存储式集群,也支持分布式事务集群。 阅读详情

相关推荐

PostgreSQL表复制5种方法详解:从CTAS到pg_dump实战对比

在数据库管理与数据迁移场景中,表复制是一项基础且关键的技术操作。其核心原理是通过不同方式创建表结构副本并迁移数据,以满足备份、测试、重构等需求。从技术价值看,高效的复制方法能显著降低对生产环境的影响,减少锁争用和WAL日志开销,保障业务连续性。在PostgreSQL中,常见的应用场景包括在线大表结构变更、测试环境搭建和数据迁移等。针对这些需求,PostgreSQL提供了多种表复制方案,例如使用CREATE TABLE AS SELECT进行快速数据快照,或通过pg_dump实现完整对象克隆。本文将重点对比分

weixin_30696427的博客 459

C#操作数据库备份和还原

C#实现SQLSERVER2000数据库备份还原的两种方法 : 方法一(不使用SQLDMO): /// ///备份方法 /// SqlConnection conn = new SqlConnection("Server=.;Database=master;User ID=sa;Password=sa;"); SqlCommand cmdBK = new SqlCommand(); cmdBK

sgpian的博客 753

Oracle 19C PDB创建与配置实战:从容器数据库到可插拔数据库的完整迁移指南

在Oracle数据库的多租户架构中,容器数据库(CDB)与可插拔数据库(PDB)是实现资源隔离与高效管理的核心技术。其原理在于通过CDB作为根容器统一管理公共资源,而PDB作为独立的逻辑数据库单元,拥有专属的表空间、用户与数据文件,从而实现物理资源的共享与逻辑层面的隔离。这一架构的技术价值在于显著提升了数据库的资源利用率、简化了数据库的克隆、迁移与备份恢复流程,并增强了多应用环境下的安全性与可维护性。其典型应用场景包括云数据库服务、开发测试环境快速搭建以及生产系统的多应用隔离部署。本文聚焦于Oracle 1

weixin_30673611的博客 856

C#实现SQL数据库备份与恢复

有两种方法,都是保存为.bak文件。一种是直接用Sql语句执行,另一种是通过引用SQL Server的SQLDMO组件来实现. 1、通过执行Sql语句来实现 注意,用Sql语句实现备份与还原操作时,最好不要使用需要备份或还原的数据库连接,而使用master,否则可能会出现如下三个问题:(1)超时时间已到。在操作完成之前超时时间已过或服务器未响应。(2) 在向服务器发送请求时发生传输级错误。(provider:共享内存提供程序,error:0-系统无法打开文件。)(3)从服务器接收结...

ba_wang_mao的专栏 758

SQL数据库管理实战:从SSMS巡检到故障应急的完整工作流

数据库管理不是写SQL语句,而是对运行状态的持续监控与干预。其核心在于理解资源水位、内部健康和行为模式三类关键指标,依托动态管理视图(DMV)实现精准诊断。技术价值体现在预防性运维——通过日常巡检、权限最小化、备份链验证等手段,将90%的故障消弭于未然。典型应用场景包括电商订单库性能保障、制造业ERP数据治理、高校毕业设计环境排障等。本文聚焦SQL Server Management Studio(SSMS)在真实生产环境中的落地实践,覆盖连接配置、15分钟晨检清单、慢SQL根因分析及合规审计闭环,特别强调

weixin_33997389的博客 406

自动化C#系统备份与恢复:打造无懈可击的数据保护方案

通过上述步骤,我们构建了一个基本的C#系统备份与恢复框架。当然,这只是一个起点,您可以在此基础上添加更多特性,比如自动调度备份任务、邮件通知等,以进一步增强系统的健壮性和可用性。希望这篇文章能为您提供有价值的参考,帮助您更好地保护您的宝贵数据。

墨夶的博客 383

如何用Restore DataBase把数据库还原到指定的路?

 restore database 数据库名 from disk='备份文件路径' with move '数据库文件名' to '数据库文件放置路径', move '日志文件名' to '日志文件存放置路径' go 如: restore database EaseWe from disk='H:\EaseWe.bak' with move 'EaseWe' to

u012732371的专栏 1万+

C# Winform学生信息管理系统毕设全流程详解

桌面应用程序开发是计算机专业学生的核心技能之一,C# 与 Winform 作为经典组合,常被用于构建数据管理类软件。其原理是通过三层架构将界面展示、业务规则与数据访问解耦,使系统更易维护和扩展。在实际工程中,配合 SQL Server 等数据库进行增删改查操作,并利用 DataGridView 等控件快速呈现数据,能够高效实现学生信息、成绩统计等功能模块。这类系统广泛适用于学校教务管理、课程设计、毕业设计等场景,是检验开发者基本功的典型项目。本文围绕 C# Winform 学生信息管理系统的完整开发流程,从

weixin_31309419的博客 277

如何高效集成BaseX XML数据库到Java企业应用:完整指南与最佳实践 [特殊字符]

BaseX是一个轻量级、高性能的XML数据库系统,专为存储、查询和处理XML数据而设计。在企业应用中,BaseX与Java的集成能够为XML数据处理提供强大的支持。本文将为您详细介绍BaseX与Java集成的完整方案,帮助您在企业级应用中快速部署和使用这个强大的XML数据库。 ## 为什么选择BaseX作为企业XML数据库解决方案? 🤔 BaseX不仅是一个XML数据库,更是一个完整的XML

gitblog_01278的博客 830

Tlsr8258开发-程序烧写

开源一小步,进步一大步

自学嵌入式 1774

Springer期刊LaTeX模板中参考文献格式选择与编译错误的快速修复指南

本文针对Springer期刊LaTeX模板中参考文献编译后显示问号的常见问题,提供了快速修复指南。核心在于正确选择并配置与期刊匹配的参考文献格式文件(.bst),并执行标准的四步编译流程。文章详细解释了问题根源,并给出了从查找正确.bst文件到修改代码、执行编译的完整解决方案,帮助作者高效解决投稿中的技术障碍。

weixin_29266007的博客 402

[SqlServer] 获取 数据库 sqlserver 关键字

最近在做个在线创建数据库表的工具,所以要用到数据库的原本的关键字,用于比对,所创建的表的列名是否为数据库的关键字。 但是数据库的关键字,从哪来? 访问 sqlserver的关键字说明官网 保留关键字 发现他把关键字都存在dom元素中的,一个个粘贴比对,得累死人,而且我们是程序员啊,怎么能用这么粗暴的方法那. 1.打开控制台 2.执行以下脚本 var res=[]; $('.tabl...

拒绝成猿的程序员 7880

自动驾驶仿真:python和carsim联合仿真案例

carsim内部有许多相关联合仿真的demo,simulink、labview等等都有涉及,这里简单介绍下python和carsim联合仿真的方法,虽然carsim官方有个Steer_Control.py相关的案例,但是感觉比较冗余,这里抽出重点部分和大家交流探讨下。提示:以下是本篇文章正文内容,下面案例可供参考1、这里关于solvers的细节其实都没说,因为里面确实也没什么内容好讲的,本质就是调用carsim.dll,如果你需要更多的函数解析其实可以看vs_api.h,路径在,具体内容如下图所示。

zataji的博客 9062

深度解析OpenMir2:构建高性能热血传奇游戏服务器的完整指南

OpenMir2是一个基于C#开发的开源热血传奇游戏服务器项目,为游戏开发者和运维人员提供了完整的MMORPG服务器解决方案。本文将深入解析OpenMir2的架构设计、部署流程和运维优化技巧,帮助您快速搭建稳定高效的游戏服务器环境。 热血传奇作为曾经风靡全国的大型多人在线角色扮演游戏,其服务器架构设计具有重要的参考价值。OpenMir2项目不仅实现了经典的传奇游戏逻辑,还采用了现代化的微服务架构

gitblog_01106的博客 409

ArcGIS Maps SDK for Unity实战:把真实世界地形‘搬进’游戏场景的保姆级教程

本文详细介绍了如何使用ArcGIS Maps SDK for Unity将真实世界地形导入游戏场景的完整流程。从高程数据获取、TPKX格式转换到Unity中的地形集成与优化,提供了保姆级教程,帮助开发者快速实现高精度地形建模,特别适用于开放世界游戏和数字孪生项目。

weixin_30621465的博客 346

材料力学小白必看:纯弯曲正应力计算全解析(附实例演示)

本文详细解析了材料力学中纯弯曲正应力的计算原理与工程应用,通过实例演示帮助初学者掌握关键公式和计算流程。内容涵盖纯弯曲的基本假设、正应力分布规律、截面特性计算,以及现代工具如Excel、ANSYS和Python在应力分析中的应用,特别适合材料力学小白系统学习。

sea99的博客 1232

安装 MongoDB、与SQL语法对比、Python (异步)操作 mongodb:增、删、改、查

安装 MongoDB、与SQL语法对比、Python (异步)操作 mongodb:增、删、改、查

freeking101的博客 8715

算法设计与分析 0-1背包问题 动态规划解法【超详细】

0-1背包问题 问题描述 给定i个物品和一个容量为的背包,物品的重量是Wi,其价值为Vi 物品个数为i,背包容量为C。 如何选择装入背包内的物品,使得装入背包中的物品的总价值最大? 其中,每种物品只有全部装入背包或不装入背包两种选择。 物品不能分割,不能重复使用。 动态规划算法思路 首先建立一个数组B[i][c],最上面一行表示背包容量,最左边一列表示物品编号,中间填充的数值表示当当前背包容量为C...

寒泉 4万+

企业级员工管理系统全栈开发实战解析

企业级应用开发中,B/S架构与三层架构是构建Web系统的经典模式。通过ORM框架实现数据持久化,结合RBAC权限模型保障系统安全,这类技术组合能有效支撑人力资源管理等业务场景。以ASP.NET MVC+EasyUI技术栈为例,其星型数据库schema设计和软删除实现展现了数据处理的最佳实践,而NPOI库的Excel导入导出功能则验证了办公自动化的可行性。对于开发者而言,研究这类带真实业务场景的完整项目源码,能深入理解从数据库设计到前端交互的全链路开发逻辑,特别是权限控制模块的Session验证机制和Auto

congsikuai0611的博客 402

【产品经理修炼之道】- 优惠券系统从入门到精通(二)

在电商平台中,优惠券的使用场景与频次都很高。那么如何做好一个优惠券系统呢?本文总结了相关流程和设计思路,希望对你有所帮助。上一篇与大家分享了架构中的前端应用、生命周期、优惠券管理中OpenAPI 、基础系统,今天继续与大家分享架构图中优惠券模板部分。

xiaoli8748的专栏 1292

信号检测算法的MATLAB仿真:能量检测、循环平稳检测和匹配滤波检测

根据具体的应用场景和要求,选择合适的信号检测算法可以提高系统的性能和可靠性。在无线电通信中,信号检测是一项重要的任务,它用于检测和识别接收到的信号。在本文中,我们将介绍三种常用的信号检测算法:能量检测、循环平稳检测和匹配滤波检测,并提供相应的MATLAB源代码进行仿真实现。在上述代码中,我们首先设置了能量检测的阈值,然后生成了一个包含1000个服从正态分布的随机信号样本的信号。在上述代码中,我们首先设置了信号模板,然后生成了一个包含信号模板的信号样本。最后,通过比较相关性的最大值与阈值来判断信号是否存在。

PixelLancer的博客 1363

Ubuntu 20.04下MongoDB迁移避坑指南:mongodump与mongorestore实战

MongoDB数据库迁移是运维与开发中的基础能力,其核心在于BSON数据的可靠导出、安全传输与精准恢复。原理上依赖mongodump生成兼容性快照、mongorestore执行原子写入,并受服务状态、用户权限、网络策略及存储引擎(如WiredTiger)多重约束。技术价值体现在保障数据一致性、支持跨版本兼容、实现权限与索引完整复现。典型应用场景包括生产环境升级、灾备重建、测试数据同步及GDPR合规导出。本文聚焦Ubuntu 20.04系统特性——如systemd服务管理、ufw防火墙默认启用、mongodb

weixin_33716154的博客 453

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

基于Docker Compose的Apache Doris集群极简部署与配置指南

最近在搞数据仓库选型,Doris 凭借其极致的查询性能和易用性逐渐成为许多团队的首选。然而,从官网下载、编译到部署,对于刚接触的开发者来说,步骤繁琐且容易踩坑。尤其是在异构的服务器环境中,依赖冲突、端口占用、配置错误等问题层出不穷,往往需要耗费大量时间排查。 本文将提供一套基于 Docker 的 Doris 极简部署方案,从零开始,手把手带你完成 FE、BE 节点的容器化部署与集群搭建。内容涵盖完整的 Docker Compose 编排文件、关键配置解析、集群初始化步骤,以及部署后最常见的连接与权限问题排查

weixin_30378623的博客 422

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

ASP.NET Core微服务架构实战:从DDD设计到K8s部署

微服务架构通过将单体应用拆分为独立部署的轻量级服务,解决了系统复杂性和交付效率的难题。其核心原理在于服务自治、明确边界和松耦合通信,技术价值体现在提升开发敏捷性、增强系统可扩展性和容错能力。在电商、金融等复杂业务场景中,微服务能有效支撑高频迭代和弹性伸缩需求。本文聚焦于ASP.NET Core这一高性能跨平台框架,结合领域驱动设计(DDD)划定服务边界,并运用Docker容器化封装与Kubernetes编排,构建高可用的分布式系统,为开发者提供从设计到生产部署的完整工程实践路径。

weixin_30263277的博客 519

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

上一篇: 常用SQL字符串函数
下一篇: Eclipse快捷键指南
dreamlins
博客等级 码龄21年 17粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值