1

GUID (sql では varchar(50,notnull)) を持っています。VB では ExecuteScalar() を介して SQL から返されます。VB ではその値を文字列 (最大 2GB) に格納しています。その後、GUID = Stored の場所で select を実行します。 GUID

プログラムを実行すると、GUID サンプル {3F2504E0-4F89-11D3-9A0C-0305E82C3301} が切り詰められているように見えます

サンプル エラー 浮動小数点値 '3F2504E0' はコンピューター表現の範囲外です (8 バイト)

私のexecuteScalarはこの情報を切り捨てていますか?

コード:

 Dim sqlquery As String
        Dim ConnectionString As String
        If cmboxDatabaseName.Text <> "" Then
            ConnectionString = "Server=" + ServerName + "\" + InstanceName + "; Database=" + Control + "; User Id=" + UserId + ";Password=" + Password + ";"
            sqlquery = "Select top 1 GUID from dbo.Databases with(Nolock) where dbName = '" + cmboxDatabaseName.Text + "'"

            'Connect
            Using conn As SqlConnection = New SqlConnection(ConnectionString)
                conn.Open()
                Using comm As SqlCommand = New SqlCommand(sqlquery, conn)
                    Hosted_GUID = comm.ExecuteScalar()
                    conn.Close()
                End Using 'comm
                conn.Close()
            End Using 'conn 
4

1 に答える 1

4

正しくない点がいくつかあります。

  1. GUID にはUniqueIdentifierを使用します。SQL がこのデータ型を取得したのには理由があります。 http://en.wikipedia.org/wiki/Globally_unique_identifier

  2. が GUID として宣言されている場合Hosted_GUID、明らかにそのように暗黙的に変換することはできません!

    Hosted_GUID = comm.ExecuteScalar()

=> GUID-Column を UniqueIdentifier として定義すると、問題は突然消えます。ただし、comm.ExecuteScalar が Nothing かどうかを確認してください。

MSDN についてExecuteScalar:

結果セットの最初の行の最初の列、または null 参照。

編集:現在の列を UniqueIdentifier に変更できない場合、最後のオプションは、コード内の文字列を GUID に変換することです。

Hosted_GUID = new Guid(comm.ExecuteScalar())

補足:また、パラメータ化されたクエリを必ず使用してください。

于 2013-07-08T21:02:04.587 に答える