Mark,
I am using the library and I have run into a situation that I think is
a bug. Here is the situation: I have a prepared statement that is
deleting some rows from a table based on user input. Rows may or may
not exist in the table that matches the user criteria. If the user
enters criteria that matches rows in the table, the delete statement
deletes the rows. However, if the user enters criteria that does not
match any rows in the table, the statement returns an "error" or "no
data found". I think that it should not return an error of no data
found, but rather return that as "information" or maybe a warning. I
am listing the code below and I am also listingthe ODBC trace files
for you to examine. Thank you,
stmt, err := db.Prepare("delete from tblDukeWebToolboxUserColumns
where userid = ? and tabletype = ?")
if err != nil {
panic(err)
}
defer stmt.Close()
_, err = stmt.Exec("LSL", "ClaimResults-Pending")
if err != nil {
panic(err) //It is erroring here
}
First trace file (no error thrown:
test-database e10-1594 ENTER SQLAllocHandle
SQLSMALLINT 1 <SQL_HANDLE_ENV>
SQLHANDLE 0x0000000000000000
SQLHANDLE * 0x000000F840042020
test-database e10-1594 EXIT SQLAllocHandle with return code 0
(SQL_SUCCESS)
SQLSMALLINT 1 <SQL_HANDLE_ENV>
SQLHANDLE 0x0000000000000000
SQLHANDLE * 0x000000F840042020 ( 0x00000000025E7EF0)
test-database e10-1594 ENTER SQLSetEnvAttr
SQLHENV 0x00000000025E7EF0
SQLINTEGER 200 <SQL_ATTR_ODBC_VERSION>
SQLPOINTER 3 <SQL_OV_ODBC3>
SQLINTEGER 0
test-database e10-1594 EXIT SQLSetEnvAttr with return code 0
(SQL_SUCCESS)
SQLHENV 0x00000000025E7EF0
SQLINTEGER 200 <SQL_ATTR_ODBC_VERSION>
SQLPOINTER 3 <SQL_OV_ODBC3>
SQLINTEGER 0
test-database e10-1594 ENTER SQLAllocHandle
SQLSMALLINT 2 <SQL_HANDLE_DBC>
SQLHANDLE 0x00000000025E7EF0
SQLHANDLE * 0x000000F84002C220
test-database e10-1594 EXIT SQLAllocHandle with return code 0
(SQL_SUCCESS)
SQLSMALLINT 2 <SQL_HANDLE_DBC>
SQLHANDLE 0x00000000025E7EF0
SQLHANDLE * 0x000000F84002C220 ( 0x00000000027984F0)
test-database e10-1594 ENTER SQLDriverConnectW
HDBC 0x00000000027984F0
HWND 0x0000000000000000
WCHAR * 0x000007FEF3718F08 [ -3] "******\ 0"
SWORD -3
WCHAR * 0x000007FEF3718F08
SWORD -3
SWORD * 0x0000000000000000
UWORD 0 <SQL_DRIVER_NOPROMPT>
test-database e10-1594 EXIT SQLDriverConnectW with return code 1
(SQL_SUCCESS_WITH_INFO)
HDBC 0x00000000027984F0
HWND 0x0000000000000000
WCHAR * 0x000007FEF3718F08 [ -3] "******\ 0"
SWORD -3
WCHAR * 0x000007FEF3718F08 <Invalid buffer length!> [-3]
SWORD -3
SWORD * 0x0000000000000000
UWORD 0 <SQL_DRIVER_NOPROMPT>
DIAG [01000] [Microsoft][SQL Server Native Client 10.0][SQL
Server]Changed database context to 'DukeAccount'. (5701)
DIAG [01000] [Microsoft][SQL Server Native Client 10.0][SQL
Server]Changed language setting to us_english. (5703)
test-database e10-1594 ENTER SQLAllocHandle
SQLSMALLINT 3 <SQL_HANDLE_STMT>
SQLHANDLE 0x00000000027984F0
SQLHANDLE * 0x000000F840042030
test-database e10-1594 EXIT SQLAllocHandle with return code 0
(SQL_SUCCESS)
SQLSMALLINT 3 <SQL_HANDLE_STMT>
SQLHANDLE 0x00000000027984F0
SQLHANDLE * 0x000000F840042030 ( 0x000000000279CF50)
test-database e10-1594 ENTER SQLPrepareW
HSTMT 0x000000000279CF50
WCHAR * 0x000000F84004A000 [ 75] "delete from
tblDukeWebToolboxUserColumns where userid = ? and tabletype = ?"
SDWORD 75
test-database e10-1594 EXIT SQLPrepareW with return code 0
(SQL_SUCCESS)
HSTMT 0x000000000279CF50
WCHAR * 0x000000F84004A000 [ 75] "delete from
tblDukeWebToolboxUserColumns where userid = ? and tabletype = ?"
SDWORD 75
test-database e10-1594 ENTER SQLNumParams
HSTMT 0x000000000279CF50
SWORD * 0x000000F840042038
test-database e10-1594 EXIT SQLNumParams with return code 0
(SQL_SUCCESS)
HSTMT 0x000000000279CF50
SWORD * 0x000000F840042038 (2)
test-database e10-1594 ENTER SQLFreeHandle
SQLSMALLINT 3 <SQL_HANDLE_STMT>
SQLHANDLE 0x000000000279CF50
test-database e10-1594 EXIT SQLFreeHandle with return code 0
(SQL_SUCCESS)
SQLSMALLINT 3 <SQL_HANDLE_STMT>
SQLHANDLE 0x000000000279CF50
test-database e10-1594 ENTER SQLAllocHandle
SQLSMALLINT 3 <SQL_HANDLE_STMT>
SQLHANDLE 0x00000000027984F0
SQLHANDLE * 0x000000F840042048
test-database e10-1594 EXIT SQLAllocHandle with return code 0
(SQL_SUCCESS)
SQLSMALLINT 3 <SQL_HANDLE_STMT>
SQLHANDLE 0x00000000027984F0
SQLHANDLE * 0x000000F840042048 ( 0x000000000279CF50)
test-database e10-1594 ENTER SQLPrepareW
HSTMT 0x000000000279CF50
WCHAR * 0x000000F84004A0A0 [ 75] "delete from
tblDukeWebToolboxUserColumns where userid = ? and tabletype = ?"
SDWORD 75
test-database e10-1594 EXIT SQLPrepareW with return code 0
(SQL_SUCCESS)
HSTMT 0x000000000279CF50
WCHAR * 0x000000F84004A0A0 [ 75] "delete from
tblDukeWebToolboxUserColumns where userid = ? and tabletype = ?"
SDWORD 75
test-database e10-1594 ENTER SQLNumParams
HSTMT 0x000000000279CF50
SWORD * 0x000000F840042050
test-database e10-1594 EXIT SQLNumParams with return code 0
(SQL_SUCCESS)
HSTMT 0x000000000279CF50
SWORD * 0x000000F840042050 (2)
test-database e10-1594 ENTER SQLFreeHandle
SQLSMALLINT 3 <SQL_HANDLE_STMT>
SQLHANDLE 0x000000000279CF50
test-database e10-1594 EXIT SQLFreeHandle with return code 0
(SQL_SUCCESS)
SQLSMALLINT 3 <SQL_HANDLE_STMT>
SQLHANDLE 0x000000000279CF50
test-database e10-1594 ENTER SQLAllocHandle
SQLSMALLINT 3 <SQL_HANDLE_STMT>
SQLHANDLE 0x00000000027984F0
SQLHANDLE * 0x000000F840042058
test-database e10-1594 EXIT SQLAllocHandle with return code 0
(SQL_SUCCESS)
SQLSMALLINT 3 <SQL_HANDLE_STMT>
SQLHANDLE 0x00000000027984F0
SQLHANDLE * 0x000000F840042058 ( 0x000000000279CF50)
test-database e10-1594 ENTER SQLPrepareW
HSTMT 0x000000000279CF50
WCHAR * 0x000000F84004A140 [ 75] "delete from
tblDukeWebToolboxUserColumns where userid = ? and tabletype = ?"
SDWORD 75
test-database e10-1594 EXIT SQLPrepareW with return code 0
(SQL_SUCCESS)
HSTMT 0x000000000279CF50
WCHAR * 0x000000F84004A140 [ 75] "delete from
tblDukeWebToolboxUserColumns where userid = ? and tabletype = ?"
SDWORD 75
test-database e10-1594 ENTER SQLBindParameter
HSTMT 0x000000000279CF50
UWORD 1
SWORD 1 <SQL_PARAM_INPUT>
SWORD -8 <SQL_C_WCHAR>
SWORD -9 <SQL_WVARCHAR>
SQLULEN 6
SWORD 0
PTR 0x000000F840042068
SQLLEN 6
SQLLEN * 0x000000F840042060
test-database e10-1594 EXIT SQLBindParameter with return code 0
(SQL_SUCCESS)
HSTMT 0x000000000279CF50
UWORD 1
SWORD 1 <SQL_PARAM_INPUT>
SWORD -8 <SQL_C_WCHAR>
SWORD -9 <SQL_WVARCHAR>
SQLULEN 6
SWORD 0
PTR 0x000000F840042068
SQLLEN 6
SQLLEN * 0x000000F840042060 (6)
test-database e10-1594 ENTER SQLBindParameter
HSTMT 0x000000000279CF50
UWORD 2
SWORD 1 <SQL_PARAM_INPUT>
SWORD -8 <SQL_C_WCHAR>
SWORD -9 <SQL_WVARCHAR>
SQLULEN 40
SWORD 0
PTR 0x000000F8400404B0
SQLLEN 40
SQLLEN * 0x000000F840042070
test-database e10-1594 EXIT SQLBindParameter with return code 0
(SQL_SUCCESS)
HSTMT 0x000000000279CF50
UWORD 2
SWORD 1 <SQL_PARAM_INPUT>
SWORD -8 <SQL_C_WCHAR>
SWORD -9 <SQL_WVARCHAR>
SQLULEN 40
SWORD 0
PTR 0x000000F8400404B0
SQLLEN 40
SQLLEN * 0x000000F840042070 (40)
test-database e10-1594 ENTER SQLExecute
HSTMT 0x000000000279CF50
test-database e10-1594 EXIT SQLExecute with return code 0
(SQL_SUCCESS)
HSTMT 0x000000000279CF50
test-database e10-1594 ENTER SQLRowCount
HSTMT 0x000000000279CF50
SQLLEN * 0x000000F840042080
test-database e10-1594 EXIT SQLRowCount with return code 0
(SQL_SUCCESS)
HSTMT 0x000000000279CF50
SQLLEN * 0x000000F840042080 (31)
test-database e10-1594 ENTER SQLFreeHandle
SQLSMALLINT 3 <SQL_HANDLE_STMT>
SQLHANDLE 0x000000000279CF50
test-database e10-1594 EXIT SQLFreeHandle with return code 0
(SQL_SUCCESS)
SQLSMALLINT 3 <SQL_HANDLE_STMT>
SQLHANDLE 0x000000000279CF50
test-database e10-1594 ENTER SQLDisconnect
HDBC 0x00000000027984F0
test-database e10-1594 EXIT SQLDisconnect with return code 0
(SQL_SUCCESS)
HDBC 0x00000000027984F0
test-database e10-1594 ENTER SQLFreeHandle
SQLSMALLINT 2 <SQL_HANDLE_DBC>
SQLHANDLE 0x00000000027984F0
test-database e10-1594 EXIT SQLFreeHandle with return code 0
(SQL_SUCCESS)
SQLSMALLINT 2 <SQL_HANDLE_DBC>
SQLHANDLE 0x00000000027984F0
Second trace file (error reported)
test-database b88-1328 ENTER SQLAllocHandle
SQLSMALLINT 1 <SQL_HANDLE_ENV>
SQLHANDLE 0x0000000000000000
SQLHANDLE * 0x000000F840042020
test-database b88-1328 EXIT SQLAllocHandle with return code 0
(SQL_SUCCESS)
SQLSMALLINT 1 <SQL_HANDLE_ENV>
SQLHANDLE 0x0000000000000000
SQLHANDLE * 0x000000F840042020 ( 0x0000000000327EF0)
test-database b88-1328 ENTER SQLSetEnvAttr
SQLHENV 0x0000000000327EF0
SQLINTEGER 200 <SQL_ATTR_ODBC_VERSION>
SQLPOINTER 3 <SQL_OV_ODBC3>
SQLINTEGER 0
test-database b88-1328 EXIT SQLSetEnvAttr with return code 0
(SQL_SUCCESS)
SQLHENV 0x0000000000327EF0
SQLINTEGER 200 <SQL_ATTR_ODBC_VERSION>
SQLPOINTER 3 <SQL_OV_ODBC3>
SQLINTEGER 0
test-database b88-1328 ENTER SQLAllocHandle
SQLSMALLINT 2 <SQL_HANDLE_DBC>
SQLHANDLE 0x0000000000327EF0
SQLHANDLE * 0x000000F84002C220
test-database b88-1328 EXIT SQLAllocHandle with return code 0
(SQL_SUCCESS)
SQLSMALLINT 2 <SQL_HANDLE_DBC>
SQLHANDLE 0x0000000000327EF0
SQLHANDLE * 0x000000F84002C220 ( 0x00000000002E84F0)
test-database b88-1328 ENTER SQLDriverConnectW
HDBC 0x00000000002E84F0
HWND 0x0000000000000000
WCHAR * 0x000007FEF3718F08 [ -3] "******\ 0"
SWORD -3
WCHAR * 0x000007FEF3718F08
SWORD -3
SWORD * 0x0000000000000000
UWORD 0 <SQL_DRIVER_NOPROMPT>
test-database b88-1328 EXIT SQLDriverConnectW with return code 1
(SQL_SUCCESS_WITH_INFO)
HDBC 0x00000000002E84F0
HWND 0x0000000000000000
WCHAR * 0x000007FEF3718F08 [ -3] "******\ 0"
SWORD -3
WCHAR * 0x000007FEF3718F08 <Invalid buffer length!> [-3]
SWORD -3
SWORD * 0x0000000000000000
UWORD 0 <SQL_DRIVER_NOPROMPT>
DIAG [01000] [Microsoft][SQL Server Native Client 10.0][SQL
Server]Changed database context to 'DukeAccount'. (5701)
DIAG [01000] [Microsoft][SQL Server Native Client 10.0][SQL
Server]Changed language setting to us_english. (5703)
test-database b88-1328 ENTER SQLAllocHandle
SQLSMALLINT 3 <SQL_HANDLE_STMT>
SQLHANDLE 0x00000000002E84F0
SQLHANDLE * 0x000000F840042030
test-database b88-1328 EXIT SQLAllocHandle with return code 0
(SQL_SUCCESS)
SQLSMALLINT 3 <SQL_HANDLE_STMT>
SQLHANDLE 0x00000000002E84F0
SQLHANDLE * 0x000000F840042030 ( 0x00000000002ECF50)
test-database b88-1328 ENTER SQLPrepareW
HSTMT 0x00000000002ECF50
WCHAR * 0x000000F84004A000 [ 75] "delete from
tblDukeWebToolboxUserColumns where userid = ? and tabletype = ?"
SDWORD 75
test-database b88-1328 EXIT SQLPrepareW with return code 0
(SQL_SUCCESS)
HSTMT 0x00000000002ECF50
WCHAR * 0x000000F84004A000 [ 75] "delete from
tblDukeWebToolboxUserColumns where userid = ? and tabletype = ?"
SDWORD 75
test-database b88-1328 ENTER SQLNumParams
HSTMT 0x00000000002ECF50
SWORD * 0x000000F840042038
test-database b88-1328 EXIT SQLNumParams with return code 0
(SQL_SUCCESS)
HSTMT 0x00000000002ECF50
SWORD * 0x000000F840042038 (2)
test-database b88-1328 ENTER SQLFreeHandle
SQLSMALLINT 3 <SQL_HANDLE_STMT>
SQLHANDLE 0x00000000002ECF50
test-database b88-1328 EXIT SQLFreeHandle with return code 0
(SQL_SUCCESS)
SQLSMALLINT 3 <SQL_HANDLE_STMT>
SQLHANDLE 0x00000000002ECF50
test-database b88-1328 ENTER SQLAllocHandle
SQLSMALLINT 3 <SQL_HANDLE_STMT>
SQLHANDLE 0x00000000002E84F0
SQLHANDLE * 0x000000F840042048
test-database b88-1328 EXIT SQLAllocHandle with return code 0
(SQL_SUCCESS)
SQLSMALLINT 3 <SQL_HANDLE_STMT>
SQLHANDLE 0x00000000002E84F0
SQLHANDLE * 0x000000F840042048 ( 0x00000000002ECF50)
test-database b88-1328 ENTER SQLPrepareW
HSTMT 0x00000000002ECF50
WCHAR * 0x000000F84004A0A0 [ 75] "delete from
tblDukeWebToolboxUserColumns where userid = ? and tabletype = ?"
SDWORD 75
test-database b88-1328 EXIT SQLPrepareW with return code 0
(SQL_SUCCESS)
HSTMT 0x00000000002ECF50
WCHAR * 0x000000F84004A0A0 [ 75] "delete from
tblDukeWebToolboxUserColumns where userid = ? and tabletype = ?"
SDWORD 75
test-database b88-1328 ENTER SQLNumParams
HSTMT 0x00000000002ECF50
SWORD * 0x000000F840042050
test-database b88-1328 EXIT SQLNumParams with return code 0
(SQL_SUCCESS)
HSTMT 0x00000000002ECF50
SWORD * 0x000000F840042050 (2)
test-database b88-1328 ENTER SQLFreeHandle
SQLSMALLINT 3 <SQL_HANDLE_STMT>
SQLHANDLE 0x00000000002ECF50
test-database b88-1328 EXIT SQLFreeHandle with return code 0
(SQL_SUCCESS)
SQLSMALLINT 3 <SQL_HANDLE_STMT>
SQLHANDLE 0x00000000002ECF50
test-database b88-1328 ENTER SQLAllocHandle
SQLSMALLINT 3 <SQL_HANDLE_STMT>
SQLHANDLE 0x00000000002E84F0
SQLHANDLE * 0x000000F840042058
test-database b88-1328 EXIT SQLAllocHandle with return code 0
(SQL_SUCCESS)
SQLSMALLINT 3 <SQL_HANDLE_STMT>
SQLHANDLE 0x00000000002E84F0
SQLHANDLE * 0x000000F840042058 ( 0x00000000002ECF50)
test-database b88-1328 ENTER SQLPrepareW
HSTMT 0x00000000002ECF50
WCHAR * 0x000000F84004A140 [ 75] "delete from
tblDukeWebToolboxUserColumns where userid = ? and tabletype = ?"
SDWORD 75
test-database b88-1328 EXIT SQLPrepareW with return code 0
(SQL_SUCCESS)
HSTMT 0x00000000002ECF50
WCHAR * 0x000000F84004A140 [ 75] "delete from
tblDukeWebToolboxUserColumns where userid = ? and tabletype = ?"
SDWORD 75
test-database b88-1328 ENTER SQLBindParameter
HSTMT 0x00000000002ECF50
UWORD 1
SWORD 1 <SQL_PARAM_INPUT>
SWORD -8 <SQL_C_WCHAR>
SWORD -9 <SQL_WVARCHAR>
SQLULEN 6
SWORD 0
PTR 0x000000F840042068
SQLLEN 6
SQLLEN * 0x000000F840042060
test-database b88-1328 EXIT SQLBindParameter with return code 0
(SQL_SUCCESS)
HSTMT 0x00000000002ECF50
UWORD 1
SWORD 1 <SQL_PARAM_INPUT>
SWORD -8 <SQL_C_WCHAR>
SWORD -9 <SQL_WVARCHAR>
SQLULEN 6
SWORD 0
PTR 0x000000F840042068
SQLLEN 6
SQLLEN * 0x000000F840042060 (6)
test-database b88-1328 ENTER SQLBindParameter
HSTMT 0x00000000002ECF50
UWORD 2
SWORD 1 <SQL_PARAM_INPUT>
SWORD -8 <SQL_C_WCHAR>
SWORD -9 <SQL_WVARCHAR>
SQLULEN 40
SWORD 0
PTR 0x000000F8400404B0
SQLLEN 40
SQLLEN * 0x000000F840042070
test-database b88-1328 EXIT SQLBindParameter with return code 0
(SQL_SUCCESS)
HSTMT 0x00000000002ECF50
UWORD 2
SWORD 1 <SQL_PARAM_INPUT>
SWORD -8 <SQL_C_WCHAR>
SWORD -9 <SQL_WVARCHAR>
SQLULEN 40
SWORD 0
PTR 0x000000F8400404B0
SQLLEN 40
SQLLEN * 0x000000F840042070 (40)
test-database b88-1328 ENTER SQLExecute
HSTMT 0x00000000002ECF50
test-database b88-1328 EXIT SQLExecute with return code 100
(SQL_NO_DATA_FOUND)
HSTMT 0x00000000002ECF50
test-database b88-1328 ENTER SQLGetDiagFieldW
SQLSMALLINT 3
SQLHANDLE 0x00000000002ECF50
SQLSMALLINT 0
SQLSMALLINT 2
SQLPOINTER 0x000000F840042078
SQLSMALLINT 4
SQLSMALLINT * 0x0000000000000000
test-database b88-1328 EXIT SQLGetDiagFieldW with return code 0
(SQL_SUCCESS)
SQLSMALLINT 3
SQLHANDLE 0x00000000002ECF50
SQLSMALLINT 0
SQLSMALLINT 2
SQLPOINTER 0x000000F840042078
SQLSMALLINT 4
SQLSMALLINT * 0x0000000000000000
test-database b88-1328 ENTER SQLFreeHandle
SQLSMALLINT 3 <SQL_HANDLE_STMT>
SQLHANDLE 0x00000000002ECF50
test-database b88-1328 EXIT SQLFreeHandle with return code 0
(SQL_SUCCESS)
SQLSMALLINT 3 <SQL_HANDLE_STMT>
SQLHANDLE 0x00000000002ECF50
test-database b88-1328 ENTER SQLDisconnect
HDBC 0x00000000002E84F0
test-database b88-1328 EXIT SQLDisconnect with return code 0
(SQL_SUCCESS)
HDBC 0x00000000002E84F0
test-database b88-1328 ENTER SQLFreeHandle
SQLSMALLINT 2 <SQL_HANDLE_DBC>
SQLHANDLE 0x00000000002E84F0
test-database b88-1328 EXIT SQLFreeHandle with return code 0
(SQL_SUCCESS)
SQLSMALLINT 2 <SQL_HANDLE_DBC>
SQLHANDLE 0x00000000002E84F0
> ...
>
> read more »