2013-07-08 4 views
1

VB에서 ExecuteScalar()를 통해 SQL에서 반환하는 GUID (varchar (50, notnull)) VB VB에서 문자열 (최대 2GB)에 해당 값을 저장하려고합니다. 그런 다음 선택을 실행합니다. 나는 그것이 GUID 샘플 {3F2504E0-4F89-11D3-9A0C-0305E82C3301}ExecuteScalar() 제한 사항?

Sampele는 '3F2504E0는'벗어 부동 소수점 값을 오류를 trucates 것처럼 보이는 프로그램을 실행하면 GUID는 GUID

를 저장 = 곳 컴퓨터 표현의 범위 (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

"GUID (varchar in sql)" 아야, 왜? UniqueIdentifier를 사용하십시오! –

+0

샘플이 GUID가 아닙니다.이 형식의 GUID는 16 진수 여야하며이 안에 'P'와 'R'이 있습니다. –

+0

맞습니다. 나는 guids에 친숙하지 않고 임의의 값을 입력했습니다. – UPGRAYEDD

답변

4

꽤 잘하지 몇 가지가 있습니다 : GUID에 대한

  1. 사용 고유 식별자. SQL에이 데이터 유형이있는 이유가 있습니다. http://en.wikipedia.org/wiki/Globally_unique_identifier

  2. Hosted_GUID 경우 다음 당신은 분명 그런 식으로 변환 할 암시 수 GUID로 선언!

    Hosted_GUID = comm.ExecuteScalar()

=>는 고유 식별자와 같은 GUID 열을 정의하면, 문제가 갑자기 사라집니다. comm.ExecuteScalar가 Nothing인지 확인하십시오.

MSDN 약 ExecuteScalar :

결과 집합에서 첫 번째 행의 첫 번째 열, 또는 Null 참조.

편집 : 당신이 고유 식별자로 현재 열을 변경할 수없는 경우은 마지막 옵션은 GUID에 코드에서 문자열을 변환하는 것입니다 :

Hosted_GUID = new Guid(comm.ExecuteScalar()) 

(!) 참고 :는 또한 매개 변수 사용해야합니다 검색어.

+0

변환 단계가 있습니까? sql에서 varchar (50)를 유지하면서 처음부터 처리 할 수 ​​있습니까? – UPGRAYEDD

+0

그래. 새로운 nullable 열을 생성 한 다음 여기에서 응답과 같이 기존 VARCHAR (50) 열을 변환 할 수 있습니다. http://stackoverflow.com/questions/1390109/convert-varchar-to-uniqueidentifier-in-sql-server –

+0

죄송합니다. 나는 VB에서 변환 할 필요가, 우리는 SQL 코드를 변경하기 시작하면 패치를 공개해야 할 것입니다. 그것은 거대한 시련입니다. – UPGRAYEDD