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 在连接之前检查数据库是不是存在的主要内容,如果未能解决你的问题,请参考以下文章