代码之家  ›  专栏  ›  技术社区  ›  HasanG Joe Dabones

使用readxml进行SQL Server数据库还原

  •  0
  • HasanG Joe Dabones  · 技术社区  · 14 年前

    我从使用以下过程创建的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();
            }
        }
    }
    

    现在我要还原这个数据库。有简单的方法吗?

    2 回复  |  直到 11 年前
        1
  •  3
  •   gbn    14 年前

    基本上没有。

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

    像其他人一样使用SQL Server本机备份和还原。抱歉,如果这很残酷,但我从未见过有人尝试备份这样的数据库。

    评论后:

    为什么不让你的主机给你一个ftp(等)备份呢?

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

        2
  •  2
  •   HasanG Joe Dabones    14 年前

    好的,下面是基于 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。