在重新创建表之前,我正在尝试创建数据库中包含的数据的备份。到目前为止,我已经连接到服务器并创建了存储SQL的文件。问题是它在最后一行抛出了一个错误。
“未将对象引用设置为对象的实例”
我已经在这个项目上做了一整天,所以可能会错过一些新的眼睛会有所帮助的东西。
代码如下:
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中发布迁移功能之前,这将是必须的。
希望有人能帮上忙。谢谢
发布于 2011-03-20 07:24:04
我认为您的问题可能是table.ToString()。请尝试使用table.Name。
发布于 2011-03-20 07:04:25
你打算怎么把数据放回去?我还没有首先使用EF代码,而且我对SQL server相当熟悉,所以如果我处在你的位置,我肯定会选择使用SSMS或良好的T-SQL 的解决方案。
您正在进行的架构更改的性质是什么?您是在删除列、重新排列列,还是做更复杂的事情?如果要删除列,那么在T-SQL中可以很容易地删除这些列。如果要重新排列列,则必须将数据推送到临时(或标准/永久)表中,进行更改,然后编写脚本返回更改。这也很容易做到。如果您扩展了自己的需求,也许有人可以帮助您找到一个简单的sql解决方案。
发布于 2015-10-12 18:23:42
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();
}https://stackoverflow.com/questions/5365408
复制相似问题