Reputation: 1
I have developed a simple standalone database app using Visual Studio 2022. My app works well on my PC, but it is not able to create the database when I tried it on a new PC. I have used SSMS to generate a script and also added the script as an "embedded resource" in my solution prior to publishing. I have been stuck at it for the last five days.
Here are the the script file, connection string and the database creator files.
The CreateDatabase()
function shows an error
Database ACI2 does not exist
on the command.ExecuteNonQuery()
line.
And please take it easy on me as I am learning to use VB.NET for the first time.
Connection string:
Data Source=(localdb)\mssqllocaldb;Initial Catalog=master;Integrated Security=True
ACI.ACI_db_script.sql
:
USE [master]
/****** Object: Database [ACI2] Script Date: 7/29/2024 12:13:57 AM ******/
CREATE DATABASE [ACI2]
CONTAINMENT = NONE
ON PRIMARY
(NAME = N'ACI2',
FILENAME = N'C:\Users\ADMIN\ACI2.mdf',
SIZE = 8192KB, MAXSIZE = UNLIMITED,
FILEGROWTH = 65536KB
)
LOG ON
(NAME = N'ACI2_log',
FILENAME = N'C:\Users\ADMIN\ACI2_log.ldf',
SIZE = 8192KB, MAXSIZE = 2048GB,
FILEGROWTH = 65536KB
)
WITH CATALOG_COLLATION = DATABASE_DEFAULT
ALTER DATABASE [ACI2] SET COMPATIBILITY_LEVEL = 150IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
BEGIN
EXEC [ACI2].[dbo].[sp_fulltext_database] @action = 'enable'
END
ALTER DATABASE [ACI2] SET ANSI_NULL_DEFAULT OFF
ALTER DATABASE [ACI2] SET ANSI_NULLS OFF
ALTER DATABASE [ACI2] SET ANSI_PADDING OFF
ALTER DATABASE [ACI2] SET ANSI_WARNINGS OFF
ALTER DATABASE [ACI2] SET ARITHABORT OFF
ALTER DATABASE [ACI2] SET AUTO_CLOSE ON
ALTER DATABASE [ACI2] SET AUTO_SHRINK OFF
ALTER DATABASE [ACI2] SET AUTO_UPDATE_STATISTICS ON
ALTER DATABASE [ACI2] SET CURSOR_CLOSE_ON_COMMIT OFF
ALTER DATABASE [ACI2] SET CURSOR_DEFAULT GLOBAL
ALTER DATABASE [ACI2] SET CONCAT_NULL_YIELDS_NULL OFF
ALTER DATABASE [ACI2] SET NUMERIC_ROUNDABORT OFF
ALTER DATABASE [ACI2] SET QUOTED_IDENTIFIER OFF
ALTER DATABASE [ACI2] SET RECURSIVE_TRIGGERS OFF
ALTER DATABASE [ACI2] SET ENABLE_BROKER
ALTER DATABASE [ACI2] SET AUTO_UPDATE_STATISTICS_ASYNC OFF
ALTER DATABASE [ACI2] SET DATE_CORRELATION_OPTIMIZATION OFF
ALTER DATABASE [ACI2] SET TRUSTWORTHY OFF
ALTER DATABASE [ACI2] SET ALLOW_SNAPSHOT_ISOLATION OFF
ALTER DATABASE [ACI2] SET PARAMETERIZATION SIMPLE
ALTER DATABASE [ACI2] SET READ_COMMITTED_SNAPSHOT OFF
ALTER DATABASE [ACI2] SET HONOR_BROKER_PRIORITY OFF
ALTER DATABASE [ACI2] SET RECOVERY SIMPLE
ALTER DATABASE [ACI2] SET MULTI_USER
ALTER DATABASE [ACI2] SET PAGE_VERIFY CHECKSUM
ALTER DATABASE [ACI2] SET DB_CHAINING OFF
ALTER DATABASE [ACI2] SET FILESTREAM(NON_TRANSACTED_ACCESS = OFF)
ALTER DATABASE [ACI2] SET TARGET_RECOVERY_TIME = 60 SECONDS
ALTER DATABASE [ACI2] SET DELAYED_DURABILITY = DISABLED
ALTER DATABASE [ACI2] SET ACCELERATED_DATABASE_RECOVERY = OFF
ALTER DATABASE [ACI2] SET QUERY_STORE = OFF
IF (NOT EXISTS (SELECT * FROM sys.schemas WHERE name = 'ACI2'))
BEGIN
EXEC ('CREATE SCHEMA [ACI2]')
END
USE [ACI2]
/****** Object: Table [ACI2].[Address] Script Date: 7/29/2024 12:13:57 AM ******/
SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
CREATE TABLE [ACI2].[Address]
(
[CustomerID] [int] NOT NULL,
[City] [nvarchar](20) NOT NULL,
[SubCity] [nvarchar](20) NULL,
[Wereda] [nvarchar](20) NULL,
[HouseNumber] [nvarchar](20) NULL
) ON [PRIMARY]
/****** Object: Table [ACI2].[Customers] Script Date: 7/29/2024 12:13:57 AM ******/
SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
CREATE TABLE [ACI2].[Customers]
(
[CustomerFullName] [nvarchar](20) NOT NULL,
[CustomerType] [nvarchar](20) NOT NULL,
[CustomerStatus] [nvarchar](10) NOT NULL,
[CustomerID] [nchar](4) NOT NULL,
CONSTRAINT [PK_Customers_CustomerID]
PRIMARY KEY CLUSTERED ([CustomerID] ASC)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
/****** Object: StoredProcedure [ACI2].[NewAddress] Script Date: 7/29/2024 12:13:57 AM ******/
SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_SCHEMA = 'ACI2'
AND ROUTINE_NAME = 'NewAddress')
BEGIN
EXEC('CREATE PROCEDURE [ACI2].[NewAddress]
@CustomerID INT ,
@City NVARCHAR (20) ,
@SubCity NVARCHAR (20) ,
@Wereda NVARCHAR (20) ,
@HouseNumber NVARCHAR (20)
AS
BEGIN
INSERT INTO [ACI2].[Address] (CustomerID ,City,SubCity,Wereda,HouseNumber)
VALUES (@CustomerID,@City,@SubCity,@Wereda,@HouseNumber);
RETURN @@ERROR
END')
END
/****** Object: StoredProcedure [ACI2].[NewCustomer] Script Date: 7/29/2024 12:13:57 AM ******/
SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_SCHEMA = 'ACI2' AND ROUTINE_NAME = 'NewCustomer')
BEGIN
EXEC('CREATE PROCEDURE [ACI2].[NewCustomer]
@CustomerID NCHAR (4),
@CustomerFullName NVARCHAR (20),
@CustomerStatus NVARCHAR (10),
@CustomerType NVARCHAR (20)
AS
BEGIN
INSERT INTO [ACI2].[Customers] (CustomerFullName,CustomerType,CustomerStatus,CustomerID)
VALUES (@CustomerFullName,@CustomerType,@CustomerStatus,@CustomerID);
RETURN @@ERROR
END')
END
/****** Object: StoredProcedure [ACI2].[UserLogin] Script Date: 7/29/2024 12:13:57 AM ******/
SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_SCHEMA = 'ACI2' AND ROUTINE_NAME = 'UserLogin')
BEGIN
EXEC('CREATE PROCEDURE [ACI2].[UserLogin]
@pLoginName NVARCHAR(40),
@pPassword NVARCHAR(50)
AS
BEGIN
SELECT * FROM [ACI2].[Users]
WHERE UserName=@pLoginName AND
PasswordHash=HASHBYTES("SHA2_512", @pPassword)
RETURN @@ERROR
END')
END
USE [master]
ALTER DATABASE [ACI2] SET READ_WRITE
`
Database Creator code:
Imports System.Data.SqlClient
Imports System.IO
Imports System.Reflection
Public Class DatabaseCreator
Public Shared Sub CreateDatabase()
Dim resourceName As String = "ACI.ACI_db_script.sql" ' Replace with your resource name
Dim assembly As Assembly = Assembly.GetExecutingAssembly()
Dim resourceStream As Stream = assembly.GetManifestResourceStream(resourceName)
If resourceStream IsNot Nothing Then
Using reader As New StreamReader(resourceStream)
Dim sqlScript As String = reader.ReadToEnd()
' Replace placeholders with dynamic paths
Dim dataPath As String = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)
Dim mdfPath As String = Path.Combine(dataPath, "ACI2.mdf")
Dim logPath As String = Path.Combine(dataPath.Replace("Data", "Logs"), "ACI2_log.ldf")
sqlScript = sqlScript.Replace("C:\Users\ADMIN\ACI2.mdf", mdfPath).Replace("C:\Users\ADMIN\ACI2_log.ldf", logPath)
' Connect to SQL Server
Dim connectionString As String = "Data Source=(localdb)\mssqllocaldb;Initial Catalog=master;Integrated Security=True"
Using connection As New SqlConnection(connectionString)
Try
connection.Open()
' Check if database exists
Dim existsSql = "SELECT 1 FROM sys.databases WHERE name = 'ACI2'"
Using existsCommand As New SqlCommand(existsSql, connection)
Dim exists As Boolean = CBool(existsCommand.ExecuteScalar())
If Not exists Then
' Create database
Using command As New SqlCommand(sqlScript, connection)
command.ExecuteNonQuery()
End Using
Else
Console.WriteLine("Database ACI2 already exists.")
End If
End Using
Catch ex As SqlException
Console.WriteLine("Error creating database: " & ex.Message)
' Log the error for detailed analysis
Finally
connection.Close()
End Try
End Using
End Using
Else
Console.WriteLine("Embedded resource not found.")
End If
End Sub
End Class
Upvotes: 0
Views: 60