Cri*_*ufu 4 c# sql sql-server visual-studio-2010
考虑以下情况:
现在,我有一个C#应用程序解析文件以获取详细信息(表,列等)并启动新的SQL连接以执行SQL命令以在数据库中创建这些表.
我想要的是创建一个SQL项目,我将手动创建这些表,并从C#应用程序,我想以编程方式将SQL项目发布到某个服务器和数据库.
这可能吗 ?
如果您在.NET 4及更高版本中使用基于sqlproj的项目,则可以使用Microsoft.Build命名空间中的类以编程方式构建和发布它.从我的答案采取在这里:
using Microsoft.Build.Framework;
using Microsoft.Build.Execution;
public void UpdateSchema() {
var props = new Dictionary<string, string> {
{ "UpdateDatabase", "True" },
{ "PublishScriptFileName", "schema-update.sql" },
{ "SqlPublishProfilePath", "path/to/publish.xml") }
};
var projPath = "path/to/database.sqlproj";
var result = BuildManager.DefaultBuildManager.Build(
new BuildParameters { Loggers = new[] { new ConsoleLogger() } },
new BuildRequestData(new ProjectInstance(projPath, props, null), new[] { "Publish" }));
if (result.OverallResult == BuildResultCode.Success) {
Console.WriteLine("Schema update succeeded!");
}
else {
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("Schema update failed!");
Console.ResetColor();
}
}
private class ConsoleLogger : ILogger
{
public void Initialize(IEventSource eventSource) {
eventSource.ErrorRaised += (sender, e) => {
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine(e.Message);
Console.ResetColor();
};
eventSource.MessageRaised += (sender, e) => {
if (e.Importance != MessageImportance.Low)
Console.WriteLine(e.Message);
};
}
public void Shutdown() { }
public LoggerVerbosity Verbosity { get; set; }
public string Parameters { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这适用于.NET 4及更高版本.确保并包含对Microsoft.Build和Microsoft.Build.Framework的程序集引用.