以下是使用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. 第1行:导入所需的命名空间。
  2. 第3-6行:定义数据库连接字符串和实体文件存储路径。
  3. 第9-12行:如果文件夹不存在,则创建文件夹。
  4. 第15-22行:获取所有表名,并且针对每个表创建实体文件。
  5. 第24-28行:获取表的所有列,并构建INSERT语句。
  6. 第30-34行:获取表的所有数据,并写入INSERT语句到实体文件中。
  7. 第36-37行:关闭实体文件。
  8. 第39-40行:关闭数据库连接。
  9. 第43-45行:输出备份成功消息,并等待用户按下任意键退出程序。

请注意,此代码仅备份表的数据,不包括表结构。如果需要备份表结构,需要编写适当的代码以获取表的列和数据类型,并构建CREATE TABLE语句。

使用c#做一个sqlserver实体文件备份工具并且带注释

原文地址: https://www.cveoy.top/t/topic/LSO 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录