使用c#做一个sqlserver实体文件备份工具并且带注释
以下是使用C#编写的SQL Server实体文件备份工具,带有注释:
using System;
using System.Data.SqlClient;
using System.IO;
namespace EntityBackupTool
{
class Program
{
static void Main(string[] args)
{
// 数据库连接字符串
string connectionString = "Data Source=localhost;Initial Catalog=YourDatabase;Integrated Security=True";
// 实体文件存储路径
string entityFilePath = @"D:\EntityBackup\YourDatabase";
// 如果文件夹不存在,则创建文件夹
if (!Directory.Exists(entityFilePath))
{
Directory.CreateDirectory(entityFilePath);
}
// 获取所有表名
SqlConnection connection = new SqlConnection(connectionString);
connection.Open();
SqlCommand command = new SqlCommand("SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE'", connection);
SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
string tableName = reader[0].ToString();
Console.WriteLine("Backing up table: " + tableName);
// 创建实体文件
string entityFile = entityFilePath + "\\" + tableName + ".sql";
StreamWriter writer = new StreamWriter(entityFile);
writer.WriteLine("SET IDENTITY_INSERT " + tableName + " ON;");
// 获取表的所有列
command = new SqlCommand("SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='" + tableName + "'", connection);
SqlDataReader columnReader = command.ExecuteReader();
// 构建INSERT语句
string columns = "";
string values = "";
while (columnReader.Read())
{
string columnName = columnReader[0].ToString();
columns += "[" + columnName + "], ";
values += "@" + columnName + ", ";
}
columns = columns.Substring(0, columns.Length - 2);
values = values.Substring(0, values.Length - 2);
// 获取表的所有数据
SqlCommand getDataCommand = new SqlCommand("SELECT * FROM " + tableName, connection);
SqlDataReader dataReader = getDataCommand.ExecuteReader();
while (dataReader.Read())
{
writer.Write("INSERT INTO " + tableName + "(" + columns + ") VALUES (");
// 拼接所有列的值
for (int i = 0; i < dataReader.FieldCount; i++)
{
string value = dataReader[i].ToString();
if (value == "")
{
writer.Write("NULL, ");
}
else if (value.Contains("'"))
{
writer.Write("N'" + value.Replace("'", "''") + "', ");
}
else
{
writer.Write("'" + value + "', ");
}
}
// 写入INSERT语句
writer.WriteLine(");");
}
writer.WriteLine("SET IDENTITY_INSERT " + tableName + " OFF;");
writer.Close();
}
connection.Close();
Console.WriteLine("All tables backed up successfully.");
Console.ReadLine();
}
}
}
注释解释:
- 第1行:导入所需的命名空间。
- 第3-6行:定义数据库连接字符串和实体文件存储路径。
- 第9-12行:如果文件夹不存在,则创建文件夹。
- 第15-22行:获取所有表名,并且针对每个表创建实体文件。
- 第24-28行:获取表的所有列,并构建INSERT语句。
- 第30-34行:获取表的所有数据,并写入INSERT语句到实体文件中。
- 第36-37行:关闭实体文件。
- 第39-40行:关闭数据库连接。
- 第43-45行:输出备份成功消息,并等待用户按下任意键退出程序。
请注意,此代码仅备份表的数据,不包括表结构。如果需要备份表结构,需要编写适当的代码以获取表的列和数据类型,并构建CREATE TABLE语句。
原文地址: https://www.cveoy.top/t/topic/LSO 著作权归作者所有。请勿转载和采集!