VB.net 在连接之前检查数据库是不是存在

Posted

技术标签:

【中文标题】VB.net 在连接之前检查数据库是不是存在【英文标题】:VB.net Checking if database exists before connecting to itVB.net 在连接之前检查数据库是否存在 【发布时间】:2016-04-24 23:13:45 【问题描述】:

我found下面的查询是为了查明是否已经创建了一个数据库表:

if db_id('thedbName') is not null
   --code mine :)
   print 'db exists'
else
   print 'nope'

现在我想在我的 VB.net 应用程序中使用相同的查询。这是我目前在其他地方连接到数据库的代码(我想在执行所有这些操作之前查看它是否存在):

Dim cn As SqlConnection = New SqlConnection("Data Source=DAVIDSDESKTOP;" & _
                                            "Initial Catalog=thedbName;" & _
                                            "Integrated Security=True;" & _
                                            "Pooling=False")

    Dim sql As String = "if db_id('thedbName') is not null " & vbCrLf & _
                            "Print() 'exists' " & vbCrLf & _
                        "else " & vbCrLf & _
                            "Print() 'nope'"

    Dim cmd As SqlCommand = New SqlCommand(sql, cn)

    cmd.Connection.Open()
    Dim blah As String = cmd.ExecuteNonQuery()
    cmd.Connection.Close()

当然,问题是我必须先知道数据库名称才能连接到数据库。

然后我似乎可以使用以下方法连接到 master 数据库:

Dim cn As SqlConnection = New SqlConnection("Data Source=DAVIDSDESKTOP;" & _
                                            "Integrated Security=True;" & _
                                            "Pooling=False")

    Dim sql As String = "if db_id('thedbName') is not null " & vbCrLf & _
                            "Print() 'exists' " & vbCrLf & _
                        "else " & vbCrLf & _
                            "Print() 'nope'"

    Dim cmd As SqlCommand = New SqlCommand(sql, cn)

    cmd.Connection.Open()
    Dim blah As String = cmd.ExecuteNonQuery()
    cmd.Connection.Close()

但该查询似乎在 Dim blah As String = cmd.ExecuteNonQuery() of 上引发错误:

附加信息:')' 附近的语法不正确。

所以我不确定为了更正查询问题而遗漏了什么?

需要知道如何让查询返回并说“存在”或“不”

【问题讨论】:

您是否先在数据库上运行查询,然后再将其包含在代码中? How to check if a database and tables exist in sql server in a vb .net project?的可能重复 是的,使用 SQL 管理工作室,查询工作得很好。 @MrGadget 不适用,因为我还想返回“存在”或“不”。在其他帖子的链接中没有这种方式的解决方案。 应该只是 Print exists 没有括号 【参考方案1】:

Print() 更改为Print(去掉括号。)


最好不要使用Print,使用select

Dim sql As String = "if db_id('thedbName') is not null " & vbCrLf & _
                        "select 'exists' " & vbCrLf & _
                    "else " & vbCrLf & _
                        "select 'nope'"

Dim blah As String = CType(cmd.ExecuteScalar(), string)

ExecuteNonQuery 返回更新和插入的受影响行数。但是你正在执行的一个查询。

ExecuteScalar 返回所选第一行的第一列。上面的查询只返回一行一个值,所以它会返回。

【讨论】:

感谢您发现这一点。没有错误,但它一直返回 -1 而不是 'exists' 或 'nope' 伟大的斯科特!哈。感谢您的示例代码。它现在工作得很好!【参考方案2】:

或者这样做

select * from sys.databases where [name] = 'thedbName'

如果返回一行,则数据库存在,如果不返回,则不存在。

要检查数据库中是否存在表,请使用此

select * from sys.objects where [name] = 'theTableName' and type_desc = 'USER_TABLE'

【讨论】:

以上是关于VB.net 在连接之前检查数据库是不是存在的主要内容,如果未能解决你的问题,请参考以下文章

vb.net 中是不是有任何代码来检查打印机状态

检查 VB.net 的 DataTable 中是不是存在值的最简单/最快的方法?

在 SQL 和 VB.NET 中检查日期是不是小于另一个

如何确定VB.net中是不是已经存在记录?

如何检查字节是不是为空 vb.net

VB.NET - 检查子节点是不是在 TreeView 中选中