[英]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.