我们有一个Silverlight ASP .NET Web应用程序,需要与Sql Server数据库一起部署在客户端的服务器上。一旦他们在他们的服务器上部署,许多工作站就可以访问它并运行silverlight客户端。
我正在考虑创建一个小型部署项目,向资源添加必要的脚本文件,并创建一个msi安装完成后,我们可以执行sql脚本来添加数据库及其表。我不确定这是否可行,是否有更好的方法呢?此外,如果app / db有任何未来更新,如何在服务器上完成(静默更新/安装)?
非常感谢任何链接/步骤/程序。
谢谢!
答案 0 :(得分:0)
您可以使用MSI创建脚本,然后您应该能够使用sqlcmd或osql命令行实用程序作为安装的一部分运行它们,您显然需要让用户捕获服务器名称,数据库名称和凭据作为安装的一部分。
通过更新数据库模式,您可以通过应用程序中的代码执行此操作,这意味着您需要在某处维护数据库版本,以便应用程序知道何时运行脚本,或者只编写相关的alter语句脚本,并在部署时在服务器上运行它,再次使用其中一个命令行实用程序。
答案 1 :(得分:0)
感谢Baldy的回复。这正是我的想法并做了一个小测试。我有一个简单的ASP .NET Web应用程序,带有一个标签,一个类库项目,它有一个覆盖方法Install(创建批处理文件并执行它),wand一个实际安装的WebSetup项目,在安装过程中它将执行Install方法类库项目。这是代码 -
1)ClassLibrary项目 - MyCustomAction
<RunInstaller(True)> _
Public Class SetupAction
Inherits Installer
Public Overrides Sub Install(ByVal stateSaver As System.Collections.IDictionary)
MyBase.Install(stateSaver)
Try
My.Computer.FileSystem.WriteAllText("E:\SetupTest.txt", Environment.NewLine + "File created from MyCustomAction project", True)
'Shell("SQLCMD -S Dev1 -d Prac -i ""E:\Copy of CreateTable1.sql""", AppWinStyle.MinimizedFocus, True, 5000)
File.WriteAllText("E:\Test.bat", "SQLCMD -S Dev1 -d Prac -i ""E:\CreateTable1.sql""")
Process.Start("E:\Test.bat")
Catch ex As Exception
My.Computer.FileSystem.WriteAllText("E:\ErrorLog.txt", Environment.NewLine + "Exception: " + ex.Message, True)
Finally
End Try
End Sub
End Class
2)ASP .NET项目 - MyApplication
Partial Public Class _Default
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Label1.Text = "Current Time: " + Now.ToString
End Sub
End Class
3)WebSetup项目 - MyApplicationSetup
作为旁注,如果我在单独的Windows应用程序中运行CustomAction代码,它执行完全正常。因此,看起来像安装时,它无法执行命令行命令(虽然我在任务管理器中看到cmd.exe / SQLCMD.exe)。我不确定这是否是一个权限问题,但我在管理员组中并拥有必要的权限。
在“我的答案”部分写下这些评论可能不合适,但想详细解释一下情况。我真的坚持这个,如果有人可以提出改进/替代方法的指针,将非常有帮助。在此先感谢,非常感谢您的帮助。