标准的 SQL Server 用户名密码连接字符串
string connectionString = @"Data Source=服务器地址;Initial Catalog=数据库名;User ID=用户名;Password=密码;";
示例(本地数据库实例)
string connectionString = @"Data Source=localhost\SQLEXPRESS;Initial Catalog=test;User ID=zyy;Password=Fh***345;";
如果加上Integrated Security=True",这时User Id=zyy;Password=Fh***345;就失效了,不起作用。
connectionString = @"Data Source=localhost\SQLEXPRESS;Initial Catalog=Test;User Id=zyy;Password=Fh***345;Integrated Security=True";
Integrated Security=True 强制使用Windows 身份验证,此时 User Id 和 Password 会被忽略。
connectionString = @"Data Source=localhost\SQLEXPRESS;Initial Catalog=Test;User Id=zyy;Password=Fh***345;";
如果用了用户名User Id和密码password来连接数据库,一定要为用户设置好权限。
数据库自动备份代码,用户一定要有数据库的 db_owner 成员角色。不然会报错,不能备份成功,“在数据库 'test' 中拒绝了 BACKUP DATABASE 权限。BACKUP DATABASE 正在异常终止。”
///
/// 备份数据库
///
/// 要备份的数据库名称
/// 备份文件保存路径
/// 备份文件名称前缀
/// 是否备份成功
public void BackupDatabase(string databaseName, string backupPath, string fileNamePrefix = "")
{
// 检查备份目录是否存在,不存在则创建
if (!Directory.Exists(backupPath))
{
Directory.CreateDirectory(backupPath);
}
// 生成备份文件名,包含时间戳以防重名
string timestamp = DateTime.Now.ToString("yyyyMMddHHmmss");
string fileName = string.IsNullOrEmpty(fileNamePrefix)
? $"{databaseName}_Backup_{timestamp}.bak"
: $"{fileNamePrefix}_{databaseName}_Backup_{timestamp}.bak";
string fullBackupPath = Path.Combine(backupPath, fileName);
// 构建备份SQL命令
string backupCommand = $@"
BACKUP DATABASE [{databaseName}]
TO DISK = N'{fullBackupPath}'
WITH NOFORMAT, NOINIT,
NAME = N'{databaseName} - 完整备份',
SKIP, NOREWIND, NOUNLOAD, STATS = 10";
// 执行备份命令
using (SqlConnection connection = new SqlConnection(_connectionString))
{
connection.Open();
using (SqlCommand command = new SqlCommand(backupCommand, connection))
{
command.CommandTimeout = 3600; // 设置超时时间为1小时,根据需要调整
command.ExecuteNonQuery();
}
}
}
// 获取SQL Server所有用户数据库
public List GetUserDatabases()
{
List userDatabases = new List();
// SQL查询:排除系统数据库
string query = @"
SELECT name
FROM sys.databases
WHERE database_id > 4 -- 系统数据库的ID是1-4
AND state = 0"; // 数据库处于在线状态
using (SqlConnection connection = new SqlConnection(_connectionString))
{
connection.Open();
using (SqlCommand command = new SqlCommand(query, connection))
{
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
string databaseName = reader["name"].ToString();
userDatabases.Add(databaseName);
}
}
}
}
return userDatabases;
}