ExecuteScalar()限制?

时间:2013-07-08 20:56:14

标签: sql vb.net executescalar

我有一个GUID(sql中的varchar(50,notnull))我通过VB中的ExecuteScalar()从SQL返回 我将该值存储在VB中的字符串(最大2gb)中 然后我运行一个选择GUID =存储GUID

当我运行该程序时,它看起来就像是在终止GUID 样本{3F2504E0-4F89-11D3-9A0C-0305E82C3301}

Sampele Error浮点值' 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 

1 个答案:

答案 0 :(得分:4)

有些事情不太正确:

  1. 对GUID使用 UniqueIdentifier 。 SQL有这个数据类型的原因。 http://en.wikipedia.org/wiki/Globally_unique_identifier

  2. 如果Hosted_GUID被声明为GUID,那么您显然不能隐式 像这样转换!

    Hosted_GUID = comm.ExecuteScalar()

  3. =&GT;如果将GUID-Column定义为UniqueIdentifier,则问题将突然消失。 虽然一定要检查comm.ExecuteScalar是否为Nothing。

    关于ExecuteScalar的MSDN:

    结果集中第一行的第一列或空引用。

    编辑:如果您无法将当前列更改为UniqueIdentifier,则最后一个选项是将代码中的字符串转换为GUID:

    Hosted_GUID = new Guid(comm.ExecuteScalar())
    

    旁注:还要确保使用参数化查询。