添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

如何在vb.net项目中检查sql server中是否存在数据库和表?

2 人关注

谁能告诉我如何从vb.net项目中检查数据库和表是否存在于sql server中?我想做的是检查数据库是否存在(最好是在'If'语句中,除非有人有更好的方法),如果它确实存在,我就做一件事,如果它不存在,我就用表和列创建数据库。如果有任何关于这个问题的帮助,我们将不胜感激。

该应用程序有一个与服务器的连接。当应用程序在PC上运行时,我希望它能检查数据库是否存在,如果存在,它就去做它应该做的事,但如果数据库不存在,它就先创建数据库,然后再去做它应该做的事。所以基本上我想让它在第一次在电脑上运行时创建数据库,然后继续做它的工作,之后每次在电脑上运行时,我想让它看到数据库存在,然后继续做它的工作。我希望这样做的原因是,这个应用程序将在不止一台PC上运行,我只希望数据库和表创建一次,(第一次在PC上运行),然后当它在不同的PC上运行时,它看到数据库已经存在,然后使用在其他PC上创建的现有数据库运行应用程序。

5 个评论
我认为你的应用程序必须已经有一个与服务器的连接?在我看来,这听起来像是一个部署,而不是你应该嵌入到一个应用程序中的东西。你可以检查sys.databases
我不认为与服务器的连接是问题所在。我假设应用程序可以在飞行中创建一个数据库和表,如果它们不存在的话。
这显示了如何检查: kellyschronicles.wordpress.com/2009/02/16/..., 我想把它作为一个答案发布,但这只是一个复制和粘贴的工作。
@Tanner 你的链接工作得很好,谢谢你的帮助。问题解决了。
@Coder92 没问题,我很快就会把它作为一个参考答案加入。
sql
sql-server
vb.net
sql-server-2008
Coder92
Coder92
发布于 2014-08-06
6 个回答
Tanner
Tanner
发布于 2021-06-06
已采纳
0 人赞同

你可以查询SQL Server来检查对象的存在。

要检查数据库是否存在,你可以使用这个查询。

SELECT * FROM master.dbo.sysdatabases WHERE name = 'YourDatabase'

要检查表是否存在,你可以对你的目标数据库使用这个查询。

SELECT * FROM sys.tables WHERE name = 'YourTable' AND type = 'U'

下面的链接显示了如何使用VB.NET代码检查数据库是否存在于SQL Server。

用vb.net检查SQL数据库是否存在于服务器上

参考上述链接中的代码。

Public Shared Function CheckDatabaseExists(ByVal server As String, _
                                           ByVal database As String) As Boolean
    Dim connString As String = ("Data Source=" _
                + (server + ";Initial Catalog=master;Integrated Security=True;"))
    Dim cmdText As String = _
       ("select * from master.dbo.sysdatabases where name=\’" + (database + "\’"))
    Dim bRet As Boolean = false
    Using sqlConnection As SqlConnection = New SqlConnection(connString)
        sqlConnection.Open
        Using sqlCmd As SqlCommand = New SqlCommand(cmdText, sqlConnection)
            Using reader As SqlDataReader = sqlCmd.ExecuteReader
                bRet = reader.HasRows
            End Using
        End Using
    End Using
    Return bRet
End Function

你可以用另一种方式进行检查,这样就可以通过使用EXISTS ,对数据库和表的检查在一次调用中完成。

IF NOT EXISTS (SELECT * FROM master.dbo.sysdatabases WHERE name = 'YourDatabase')
BEGIN
    -- Database creation SQL goes here and is only called if it doesn't exist
-- You know at this point the database exists, so check if table exists
IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = 'YourTable' AND type = 'U')
BEGIN
    -- Table creation SQL goes here and is only called if it doesn't exist

通过调用上述代码一次,加上数据库和表名的参数,你将知道两者都存在。

deterministicFail
deterministicFail
发布于 2021-06-06
0 人赞同

连接到主数据库并选择

SELECT 1 FROM master..sysdatabases WHERE name = 'yourDB'

然后在数据库上

SELECT 1 FROM INFORMATION_SCHEMA.TABLES  WHERE TABLE_NAME = 'yourTable'

我不知道确切的vb语法,但你只需检查结果中的记录数。

这将工作,但在代码方面产生问题,如果数据库或表不存在,你需要检查NULL(无)。最好使用IF EXISTS(.....) SELECT 1 ELSE SELECT 0,这样就可以保证有一个返回。
Grim
哦,讽刺的是,@确定性失败被纠正的代码并没有确定性失败......。
@Steve 在我的最后一句话中,我认为要检查结果集的计数。所以if应该是在vb中,而不是在T-SQL中。
不要忘了也要检查模式。 AND TABLE_SCHEMA = 'yourSchema'
重点是,你可以获得1或0的结果,而不需要得到一个DataSet。只是一个ExecuteScalar,它的性能更强。但是,在这种情况下,它其实并不重要。只是为了让你知道。
PseudoToad
PseudoToad
发布于 2021-06-06
0 人赞同

对于数据库中的表和其他对象,我通常是这样做的,但这确实是个人的偏好。

IF OBJECT_ID('dbo.blah') IS NOT NULL
BEGIN

对于VB.NET,我会把它包在一个存储过程中并调用它。我相信也有一些方法可以用Linq来做这个。

rohit patil
rohit patil
发布于 2021-06-06
0 人赞同

你可以使用这个查询来检查数据库

IF DB_Id('YourDatabaseName') IS NOT NULL

BEGIN

PRINT 'DB EXISTS'
PRINT 'DB  NOT EXISTS'
    
Jose Lopez
Jose Lopez
发布于 2021-06-06
0 人赞同
Friend Function CheckDatabaseExists(server As String, database As String) As Boolean
    Dim connString As String = "Data Source=" + server + ";Initial Catalog=master;Integrated Security=SSPI"
    Dim cmdText As String = "select * from master.dbo.sysdatabases where name='" + database + "'"
    Dim bRet As Boolean = False
    Using sqlConnection As SqlConnection = New SqlConnection(connString)
        sqlConnection.Open
        Using sqlCmd As SqlCommand = New SqlCommand(cmdText, sqlConnection)
            Using reader As SqlDataReader = sqlCmd.ExecuteReader
                bRet = reader.HasRows
            End Using
        End Using
    End Using
    Return bRet
End Function
    
Reagan
Reagan
发布于 2021-06-06
0 人赞同
   Public Function SQLDatabaseExist(ByVal DefaultConnectionString As String, ByVal DataBaseName As String) As Boolean
        'CREATE DATABASE
        Dim SqlString As String = ""
        SqlString = "SELECT CASE WHEN EXISTS (SELECT name FROM master.dbo.sysdatabases WHERE name = N'" & DataBaseName & "') THEN CAST (1 AS BIT) ELSE CAST (0 AS BIT) END"
        Dim ExcRet As Integer = 0
        Using connection As New SqlConnection(DefaultConnectionString)
            Dim command As New SqlCommand(SqlString, connection)
            command.Connection.Open()
            ExcRet = command.ExecuteScalar()
            command.Connection.Close()
            command.Dispose()
        End Using
        Return ExcRet