SQLFetch 관련 버그에 대해..

kid1402의 이미지

DB 라이브러리를 짜고 있습니다.
로직적으로는 문제가 없습니다.. PreparedStatement 이용해서 Column 바인딩 한 후에 SQLExecute로 실행하고 ResultSet을 가져오기 위해 SQLFetch를 하는 형식입니다.

원래 그다지 많은 쿼리가 들어갈 예정이 아니라 PreparedStatement를 초기화 할때 텍스트파일에 select * from tbl; 과 같은 형식으로 쿼리를 직접 적어둔걸 읽어서 실행하는 방식이었습니다.
그런데 이제 쿼리가 점점 늘어가고 퍼포먼스도 중요해질거 같아 쿼리를 전부 StoredProcedure로 빼고 텍스트 파일을 EXEC SELECT_QUERY_1; 과 같은 형식으로 바꿨습니다

로직상 동일한 처리가 들어갑니다. SP의 경우 select 같은 result set이 필요하다면 OUTPUT Parameter를 이용해서 실제 쿼리를 날리는 것과 동일하다는 것도 알고있습니다.

그런데 이렇게 하면 SQLExecute, 즉 실행까지는 잘 되다가 SQLFetch에서 액세스 위반으로 뻗어버립니다.

몇몇 문서를 찾아보니, ODBC 자체의 버그로 인해 64비트 OS에서는 SQLFetch 시에 ResultSet의 ValueType을 SQL_C_CHAR 등으로 맞춰 주어도 실제 들어갈 때는 ANSI 타입으로 들어가서 그렇다는 글을 보아서, ODBC 자체의 버그겠거니 했습니다.
그래서 실제 SQLFetch 전후의 값을 뜯어보려고 로그 남기는 코드를 추가했더니, 이제는 Fetch에서 뻗지도 않고 잘 돌아갑니다.....심지어 값도 제대로 읽어오구요.

로그의 유무가 버그를 고치는 해괴한 현상이 벌어진 것입니다.

대체 어디서부터 의심을 해야할 지도 모르겠고, 이렇게 로그를 남겨서 잡은 코드를 믿고 안심한 채 쓸수 있을지도 의문입니다.

질문은 두 가지입니다..

1. SQLFetch (Windows Server 2008 R2)와 관련된 액세스 위반 버그가 있나요? 혹은 겪어보신 분은 어떻게 해결하셨나요?

2. 로그 (제 코드에선 wprintf_s 로 ResultSet을 출력합니다)를 남기고 안남기고에 따라 달라지는 게 무엇이길래 버그가 사라졌다 나타났다 하는걸까요?

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.