[英]How to load data using Microsoft.SqlServer.Management.Smo in C#
[英]How i can delete all data from DB and insert new using Microsoft.SqlServer.Management.Smo;
现在我只使用这个选项
ScriptingOptions options = new ScriptingOptions();
options.ScriptSchema = false;
options.ScriptData = true;
options.ScriptForCreateDrop = true;
options.WithDependencies = true;
但我只得到输出 sript
INSERT [t].[Table] ([f], [f1], [f2], [f3], [f4], [f5], [f6]) VALUES (N'SomeData', N'SomeData', N'SomeData', N'SomeData', CAST(N'SomeData' AS DateTime2), CAST(N'SomeData' AS DateTime2), NULL)
但我想在 INSERT 之前得到 DELETE ACTION
DELETE FROM [t].[Table]
INSERT [t].[Table] ([f], [f1]) VALUES (N'SomeData', N'SomeData')
我该怎么做? 请帮助
UPD:我只是使用其他选项并将结果保存到另一个病毒
ScriptingOptions optionsForClearData = new ScriptingOptions();
optionsForClearData.ScriptSchema = false;
optionsForClearData.ScriptData = true;
optionsForClearData.ScriptForCreateDrop = true;
optionsForClearData.ScriptDrops = true;
该代码给了我结果 StringCollections 值 DELETE FROM [t].[table] 比我只是将它放入一个大字符串并使用这部分代码将其保存为 .sql 回滚文件
var tt = new StringCollection();
var s = new List<string>();
foreach (var tbl in Tables.Reverse())
{
s.AddRange(dbs.Tables[tbl].EnumScript(optionsForClearData));
}
foreach (var tbl in Tables)
{
s.AddRange(dbs.Tables[tbl].EnumScript(options));
}
tt.AddRange(s.ToArray());
MemoryStream ms = new MemoryStream();
TextWriter tw = new StreamWriter(ms);
var text = new string[tt.Count];
tt.CopyTo(text, 0);
tw.Write(string.Join("\n",text));
tw.Flush();
ms.Position = 0;
return new FormFile(ms, 0, ms.Length, "backup",
FileName+".sql");
PS:是的,我知道我错过了“使用”流(RAW CODE)
您不应该将管理库用于 CRUD 到数据库。 您需要通过数据提供者发送经过验证的查询或调用存储过程
我会推荐由 Stack Overflow 自己构建的Dapper 。 非常高效(我相信它只比 ADO.NET 慢一点,这非常了不起),减少了很多 ADO.NET 样板文件,并且您可以根据需要进行微调,因为您可以编写自己的查询
或者,对于低代码/无代码选项,还有Entity Framework 。 性能不高,但功能肯定非常丰富。
如果您不想要任何外部库,正如我所提到的,ADO .NET 的编写要多一些,但速度非常快
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.