2013-10-14 5 views
1

현재 때때로 발생하는 버그를 조사 중입니다. 아직 행동 패턴을 볼 수 없었습니다. 서버와 통신하는 vb6 com + -application이 있습니다.때때로 캐스팅 사양의 문자 값이 잘못되었습니다.

Err: Invalid character value for cast specification. (&H80040E21) 
Src: Microsoft OLE DB Provider for SQL Server 
Stacktrace: 
GetClientRS("SELECT * FROM Visit where GUID=?") 
GetVisit("('{5EF4A26A-0909-4371-97F7-A2597CB7ADE3}')") 

때때로 발생하는 오류입니다. 어쩌면 5 번마다 1 ~ 2 번 호출됩니다. SQL 서버 프로파일 러에서 추적을 시도했지만 오류를 감지 할 수 없습니다.

누구나 시도 할 수있는 아이디어가 있습니까?

Edit: 
Code for calling the command: 
GetVisit: 
    Set cmd = CreateCommand("SELECT * FROM dbo.per_Visit WHERE GUID=?") 
    cmd.Parameters.Append cmd.CreateParameter(, adGUID, , , SafeGUID(sGUID)) 

    Set GetVisit = GetClientRS(cmd, True) 

SafeGUID: 
    If Mid$(sGUID, 1, 1) <> "{" Then         
     sGUID = "{" & sGUID & "}"          
    End If 

    SafeGUID = sGUID 
+0

[명령 줄에서 GUID 값 전달 ...] (http://blogs.technet.com/b/anurag_sharma/archive/2008/02/20/passing-a-guid-value-from- 커맨드 라인을 사용하는 dtexec-to-a-variable-to-a-parameter-in-oledb-source-query-in-ssis-package-fail-with-invalid-character- for-cast-specification.aspx) – IvanH

+0

나는 그것을 고려했다. 그러나 그것이 때때로 일어나는 이유와 항상 그런 이유를 설명하지는 않는다. – isshin

+0

GUID가 제대로 포맷되지 않은 것 같습니다. 당신이 제시하고있는 것이 아니면 실제로 예외를 일으키는 것입니까? – IvanH

답변

1

SafeGUID 기능이 아마도 영리하지 않을 수 있습니다.

sGUID = "('{5EF4A26A-0909-4371-97F7-A2597CB7ADE3}')" 

실제로 매개 변수로 전달 된 값이 유효한 GUID 아니다

{('{5EF4A26A-0909-4371-97F7-A2597CB7ADE3}')} 

이다.

+0

감사합니다 .. 더 나은 보호 기능이나 guid를 "정리"하는 기능에 대한 제안이 있습니까? – isshin

+0

맞습니까? SafeGUID에 중단 점을 넣고 확인하는 것이 가능합니다. 청소는 값이 손상되었다고 가정하는 방식에 따라 다릅니다. 'sGUID = Mid $ (sGUID, 4, 38)'또는 불필요한 문자 나 정규 표현식을 대체하는 추악한 사슬 (VB6에서 호출하는 경우)을 사용할 수 있습니다. – IvanH

+0

네가 옳았다. 아직도 잘못 된 이유는 확실하지 않지만 호출되기 전에 정리를하고 오류는 더 이상 발생하지 않습니다. – isshin

관련 문제