2016-04-24 74 views
0

found下面的查詢,以找出是否一個數據庫表已經或沒有創建:VB.net檢查是否數據庫連接之前,存在

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() 

當然,這樣做的問題是,我要知道數據庫首先命名爲了連接到數據庫。

然後我似乎以此來能夠連接到數據庫:

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() 

但該查詢似乎扔在點心等等的String = cmd.ExecuteNonQuery()的錯誤:

附加信息:'''附近語法不正確。

因此,我不是所有人都確定我錯過了什麼以糾正查詢問題?

需要知道如何讓查詢回來說「存在」或「沒了」

+0

你首先包括在你的代碼之前運行數據庫的查詢? – jamiedanq

+1

[如何檢查一個數據庫和表是否存在於一個vb.net項目的sql服務器?](http://stackoverflow.com/questions/25162815/how-to-check-if-a-database- sql-server-in-a-vb-net-project) – MrGadget

+0

是的,使用SQL管理工作室的查詢工作得很好。 – StealthRT

回答

2

變化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返回所選第一行的第一列。上面的查詢只返回一行一個值,這就是它會返回的內容。

+0

感謝您的發現。沒有錯誤,但它不斷返回** - 1 **而不是'存在'或'不'' – StealthRT

+0

**偉大的斯科特!**哈。感謝您的示例代碼。它現在工作得很好! – StealthRT

0

或做這樣的

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

如果返回行,那麼數據庫存在,如果不是那麼它沒有。

要檢查表的數據庫中存在,使用這種

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