首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C# SMO -脚本化表数据到文件。抛出错误

C# SMO -脚本化表数据到文件。抛出错误
EN

Stack Overflow用户
提问于 2011-03-20 06:38:20
回答 3查看 3.2K关注 0票数 5

在重新创建表之前,我正在尝试创建数据库中包含的数据的备份。到目前为止,我已经连接到服务器并创建了存储SQL的文件。问题是它在最后一行抛出了一个错误。

“未将对象引用设置为对象的实例”

我已经在这个项目上做了一整天,所以可能会错过一些新的眼睛会有所帮助的东西。

代码如下:

代码语言:javascript
复制
public void scriptTables()
    {
        string folder = HttpContext.Current.Server.MapPath("/Scripts/SQLScripts/");

        Server myServer = new Server(".\\SQLEXPRESS");
        Database CMSDB = myServer.Databases["CMSDB"];

        Scripter script = new Scripter(myServer);
        ScriptingOptions so = new ScriptingOptions();
        so.ScriptData = true;
        so.ScriptSchema = true;
        so.ScriptDrops = false;

        foreach (Table table in CMSDB.Tables)
        {
            string tables = table.ToString();
            string filename = folder + table + ".sql";
            FileStream fs = File.Create(filename);
            so.FileName = filename;

            CMSDB.Tables[tables].EnumScript(so);
        }
    }
}

我正在做的事情的一些背景知识:

我想拉出数据库中已经存在的数据,然后更改实体模型。当应用程序重新启动时,EF框架将删除并重新创建数据库,此时我将重新输入以前存在的数据。不太确定整个过程是否会成功,但在EF中发布迁移功能之前,这将是必须的。

希望有人能帮上忙。谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-20 07:24:04

我认为您的问题可能是table.ToString()。请尝试使用table.Name。

票数 3
EN

Stack Overflow用户

发布于 2011-03-20 07:04:25

你打算怎么把数据放回去?我还没有首先使用EF代码,而且我对SQL server相当熟悉,所以如果我处在你的位置,我肯定会选择使用SSMS或良好的T-SQL 的解决方案。

您正在进行的架构更改的性质是什么?您是在删除列、重新排列列,还是做更复杂的事情?如果要删除列,那么在T-SQL中可以很容易地删除这些列。如果要重新排列列,则必须将数据推送到临时(或标准/永久)表中,进行更改,然后编写脚本返回更改。这也很容易做到。如果您扩展了自己的需求,也许有人可以帮助您找到一个简单的sql解决方案。

票数 1
EN

Stack Overflow用户

发布于 2015-10-12 18:23:42

代码语言:javascript
复制
public void CreateScriptTable() 
{
    ServerConnection serverConnection = new ServerConnection(".");
    Server server = new Server(serverConnection);
    Database database = server.Databases["ff"];
    Table tb = database.Tables["t"];
    Scripter scripter = new Scripter(server);
    scripter.Options.ScriptData = true;
    var sb = new StringBuilder();
    foreach (string s in scripter.EnumScript(new Urn[] { tb.Urn }))
    sb.Append(s);

    System.IO.StreamWriter fs = System.IO.File.CreateText(@"ScriptTable");
    fs.Write(sb);
    fs.Close();
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5365408

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档