[Okta Webinar] Learn how to a build a cloud-first strategyRegister Now

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 252
  • Last Modified:

Deployment with MSDE database

I need to know how to attach an MSDE database to my vb.net deployment application. I am using MSDE toolkit to make sure that MSDE and .Net framework are installed on the client pc. How do I use the installer class in vb.net to create or attach my database file? (Please include code example).
0
khebert1
Asked:
khebert1
  • 2
1 Solution
 
RonaldBiemansCommented:
Hi khebert1,

There is an excellent example in the help on that

The following walkthrough demonstrates the use of a custom action and the CustomActionData property to create a database and database table during installation.

Note   This walkthrough requires SQL Server on the computer where you will deploy the application.
To create an installer class

On the File menu, point to New, and then choose Project.
In the New Project dialog box, select Visual Basic Projects in the Project Type pane, and then choose Class Library in the Templates pane. In the Name box, type DBCustomAction.
Click OK to close the dialog box.
On the Project menu, choose Add New Item.
In the Add New Item dialog box, choose Installer Class. In the Name box, type DBCustomAction.
Click OK to close the dialog box.
To create a data connection object

In Server Explorer, select Data Connections. Right-click and choose Add Connection.
In the Data Link Properties dialog box, do the following:
Enter the server name.
Select Use Windows NT Integrated Security.
In the database box, type master.
Click OK to close the dialog box.
Drag the new connection and drop it on the DBCustomAction.vb designer to create a sqlConnection1 object.
To create a text file that contains a SQL statement to create a database

In Solution Explorer, select the DBCustomAction project. On the Project menu, choose Add New Item.
In the Add New Item dialog box, choose Text File. In the Name box, type sql.txt (must be in lower case).
Click OK to close the dialog box.
Add the following to the sql.txt file:
CREATE TABLE [dbo].[Employees] (
[Name] [char] (30) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[Rsvp] [int] NULL ,
[Requests] [nvarchar] (4000) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
) ON [PRIMARY];

ALTER TABLE [dbo].[Employees] WITH NOCHECK ADD
CONSTRAINT [PK_Employees] PRIMARY KEY CLUSTERED
(
[Name]
) ON [PRIMARY];
In Solution Explorer, select sql.txt. In the Properties window, set the BuildAction property to Embedded Resource.
To add code to the installer class to read the text file

In Solution Explorer, select DBCustomAction.vb. On the View menu, choose Code.
Add the following Imports statement at the top of the module:
Imports System.IO
Imports System.Reflection
Add the following code to the class:
Private Function GetSql(ByVal Name As String) As String
   Try

      ' Gets the current assembly.
      Dim Asm As [Assembly] = [Assembly].GetExecutingAssembly()

      ' Resources are named using a fully qualified name.
      Dim strm As Stream = Asm.GetManifestResourceStream(Asm.GetName().Name + "." + Name)

      ' Reads the contents of the embedded file.
      Dim reader As StreamReader = New StreamReader(strm)
      Return reader.ReadToEnd()
   Catch ex As Exception
      MsgBox("In GetSQL: " & ex.Message)
      Throw ex
   End Try

End Function

Private Sub ExecuteSql(ByVal DatabaseName As String, ByVal Sql As String)
   Dim Command As New SqlClient.SqlCommand(Sql, sqlConnection1)

   Command.Connection.Open()
   Command.Connection.ChangeDatabase(DatabaseName)
   Try
      Command.ExecuteNonQuery()
   Finally
      ' Finally, blocks are a great way to ensure that the connection
      ' is always closed.
      Command.Connection.Close()
   End Try
End Sub

Protected Sub AddDBTable(ByVal strDBName As String)
   Try
      ' Creates the database.
      ExecuteSql("master", "CREATE DATABASE " + strDBName)

      ' Creates the tables.
      ExecuteSql(strDBName, GetSql("sql.txt"))

   Catch ex As Exception
       ' Reports any errors and abort.
       MsgBox("In exception handler: " & ex.Message)
       Throw ex
   End Try
End Sub

Public Overrides Sub Install(ByVal stateSaver As System.Collections.IDictionary)
   MyBase.Install(stateSaver)
   AddDBTable(Me.Context.Parameters.Item("dbname"))
End Sub
On the Build menu, choose Build DBCustomAction.
To create a deployment project

On the File menu, choose Add Project, New Project.
In the Add Project dialog box, select Setup and Deployment Projects in the Project Type pane, and then choose Setup Project in the Templates pane. In the Name box, type DBCustomAction Installer.
Click OK to close the dialog box.
In the Properties window, select the ProductName property and type DB Installer.
In the File System Editor, select the Application Folder. On the Action menu, choose Add, Project Output.
In the Add Project Output Group dialog box, select the primary output for the DBCustomAction project. Click OK to close the dialog box.
To create a custom installation dialog

Select the DBCustomAction Installer project in Solution Explorer. On the View menu, point to Editor, and choose User Interface.
In the User Interface Editor, select the Start node under Install. On the Action menu, choose Add Dialog.
In the Add Dialog dialog box, select the Textboxes (A) dialog, then click OK to close the dialog box.
On the Action menu, choose Move Up. Repeat until the Textboxes (A) dialog is above the Installation Folder node.
In the Properties window, select the BannerText property and type Specify Database Name.
Select the BodyText property and type This dialog allows you to specify the name of the database to be created on the database server.
Select the Edit1Label property and type Name of DB:.
Select the Edit1Property property and type CUSTOMTEXTA1.
Select the Edit2Visible, Edit3Visible, and Edit4Visible properties and set them to false.
To create a custom action

Select the DBCustomAction Installer project in Solution Explorer. On the View menu, point to Editor, and choose Custom Actions.
In the Custom Actions Editor, select the Install node. On the Action menu, choose Add Custom Action.
In the Select item in project dialog box, double-click the Application Folder.
Select the Primary output from DBCustomAction(Active) item, then click OK to close the dialog box.
In the Properties window, select the CustomActionData property and type /dbname=[CUSTOMTEXTA1].
On the Build menu, choose Build DBCustomActionInstaller.
To install on your development computer

Select the DBCustomAction Installer project in Solution Explorer. On the Project menu, choose Install.
This will run the installer on your development computer.

Note   You must have install permissions on the computer in order to run the installer.
To deploy to another computer

In Windows Explorer, navigate to your project directory and find the built installer. The default path will be \documents and settings\yourloginname\DBCustomAction Installer\project configuration\DBCustomAction Installer.msi. The default project configuration is Debug.
Copy the DBCustomAction Installer.msi file and all other files and subdirectories in the directory to another computer.
Note   To install on a computer that is not on a network, copy the files to traditional media such as CD-ROM.
On the target computer, double-click the Setup.exe file to run the installer.

Note   You must have install permissions on the computer in order to run the installer.
To uninstall the application

In the Windows Control Panel, double-click Add/Remove Programs.
In the Add/Remove Programs dialog box, select DBCustomAction Installer and click Remove, then click OK to close the dialog box.
Tip   To uninstall from your development computer, on the Project menu, choose Uninstall.
0
 
khebert1Author Commented:
Looks great!, thanks for the help. Can I replace the create database code in the sql.txt file with sp_attach_db command and use an existing msde database?
0
 
RonaldBiemansCommented:
You should be able to do that
0

Featured Post

Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now