2016-04-24 8 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 Serverに存在するかどうかを確認する方法](http://stackoverflow.com/questions/25162815/how-to-check-if-a-database- and-tables-exist-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は、選択された最初の行の最初の列を返します。上記のクエリは、1つの値を持つ1つの行だけを返します。したがって、その結果が返されます。

+0

ありがとうございました。エラーはありませんが、それは** - 1 **を返し続け、 '存在しない'または 'なし' – StealthRT

+0

** Great Scott!** Ha。サンプルコードをありがとう。今はうまくいく! – StealthRT

0

又はこの

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

それは行を返す場合は、データベースが存在し、そうでない場合、それがないようにそれを行います。

テーブルがデータベース内に存在する場合は、最初にあなたのコードに含める前に、データベースにクエリを実行しました。この

select * from sys.objects where [name] = 'theTableName' and type_desc = 'USER_TABLE' 
関連する問題