【问题标题】:SQL Server Database Restore with ReadXML使用 ReadXML 进行 SQL Server 数据库还原
【发布时间】:2010-08-21 18:24:30
【问题描述】:

我已从使用此过程创建的 sqlserver 进行备份:

protected void WriteXML(string tableName)
{
    using (SqlConnection cnn = new SqlConnection(ConnectionString))
    {
        using (SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM
        [" + tableName + "];", cnn))
        {
            cnn.Open();
            DataSet ds = new DataSet();
            da.Fill(ds, tableName);
            ds.WriteXml(Server.MapPath("App_Data\\" + tableName + ".xml");
            ds.WriteXmlSchema(Server.MapPath("App_Data\\" + tableName + ".xslt");
            cnn.Close();
        }
    }
}

现在我想恢复这个数据库。有没有简单的方法可以做到这一点?

【问题讨论】:

  • 除了使用本机备份/恢复方法吗?
  • 更常见的方法是以插入语句的形式将数据导出到平面文件,因此您可以使用 Management Studio、Toad 或 SQLCMD 打开文件以运行并插入数据进入另一个实例。
  • 有趣的是,您将 XML 模式写入 .XSLT 文件 - 这是一个 XSL 转换 - 完全不同。 XML 模式文件通常存储在 file.xsd 文件中(扩展名为 .xsd)
  • 很高兴让你开心 :D。但实际上我不会将这些文件用于任何事情。无论如何,谢谢你的信息。

标签: c# sql sql-server sql-server-2005 tsql


【解决方案1】:

基本上没有。

  • 您需要考虑外键和触发器(表的顺序)
  • 备份期间数据将发生变化(缺少父级或子级)
  • 您不会备份系统表和元数据
  • 您不会备份安全性

像其他人一样使用 SQL Server 本地备份和恢复。对不起,如果这很残酷,但我从不知道有人尝试备份这样的数据库。

在cmets之后:

为什么不要求您的主机通过 FTP(等)备份给您?

另外,如果您可以通过网站备份数据库中的每个表并且可以访问,那么这意味着您的安全性很差......

【讨论】:

  • 谢谢,但我只需要使用示例数据创建数据库。我不需要关系和其他东西。只需要知道数据库是如何设计的以及其中存储了什么。
  • 您需要关系来捕获表关系、唯一性、数据完整性等。您还暗示您没有对该数据库的正常访问权限,但仍然可以转储架构和内容...为什么不问别人获取它的副本。
【解决方案2】:

好的,这里是基于eggheadcafe.com帖子的解决方案

protected void ReadXML(string tableName)
{
    DataSet ds = new DataSet();
    ds.ReadXml(Server.MapPath("App_Data\\" + tableName + ".xml");
    using (SqlBulkCopy sbc = new SqlBulkCopy(ConnectionString))
    {
        sbc.DestinationTableName = tableName;
        sbc.WriteToServer(ds.Tables[tableName]);
        sbc.Close();
    }
}

如果表有标识列,我们还必须设置 IDENTITY_INSERT [tableName] ON/OFF。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-22
    • 1970-01-01
    • 1970-01-01
    • 2010-12-17
    • 1970-01-01
    • 1970-01-01
    • 2019-05-28
    相关资源
    最近更新 更多