我有一个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
答案 0 :(得分:4)
有些事情不太正确:
对GUID使用 UniqueIdentifier 。 SQL有这个数据类型的原因。 http://en.wikipedia.org/wiki/Globally_unique_identifier
如果Hosted_GUID
被声明为GUID,那么您显然不能隐式
像这样转换!
Hosted_GUID = comm.ExecuteScalar()
=&GT;如果将GUID-Column定义为UniqueIdentifier,则问题将突然消失。 虽然一定要检查comm.ExecuteScalar是否为Nothing。
关于ExecuteScalar
的MSDN:
结果集中第一行的第一列或空引用。
编辑:如果您无法将当前列更改为UniqueIdentifier,则最后一个选项是将代码中的字符串转换为GUID:
Hosted_GUID = new Guid(comm.ExecuteScalar())
旁注:还要确保使用参数化查询。