freetds AT lists.ibiblio.org
Subject: FreeTDS Development Group
List archive
[freetds] Found solution for Bulk insert problem with nvarchar(n) where n=odd number
- From: Alexander Larkin <sasha AT chuhloma.ru>
- To: freetds AT lists.ibiblio.org
- Subject: [freetds] Found solution for Bulk insert problem with nvarchar(n) where n=odd number
- Date: Wed, 01 Jul 2009 17:40:08 +0400
For some reason this message is not visible
(https://lists.ibiblio.org/sympa/arc/freetds/2009q3/), so sending it again:
I've just found that if I set client charset in [global] of freetds.conf like
client charset = UTF8
instead of
; client charset = UTF8
then problem described before goes away.
I attach the program sample that reproduces the problem again (this time with
terminator), because one attachment that I sent before was with modifications
for NVARCHAR.
Regards,
Sasha.
#include <sqlfront.h> #include <stdlib.h> #include <stdio.h> #include <string.h> #include <assert.h> #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #define SYBNVARCHAR 103 int msg_handler (DBPROCESS *dbproc, DBINT msgno, int msgstate, int severity, char *msgtext, char *srvname, char *procname, int line); int err_handler (DBPROCESS * dbproc, int severity, int dberr, int oserr, char *dberrstr, char *oserrstr); int main (void) { LOGINREC *login; DBPROCESS *dbproc; dbinit (); login = dblogin (); DBSETLPWD (login, "password9" ); DBSETLUSER (login, "Larkin" ); DBSETLAPP (login, "testnvarchar" ); BCP_SETL (login, 1); dbproc = dbopen (login, "WL-BLADE" ); dbuse (dbproc, "DownloadNotifiesTest" ); dbloginfree (login); dberrhandle( err_handler ); dbmsghandle( msg_handler ); char cmd[512]; sprintf (cmd, "%s..%s", "DownloadNotifiesTest", "TestNVarChar" ); if (bcp_init (dbproc, cmd, NULL, NULL, DB_IN) == FAIL) { fprintf (stderr, "bcp_init: failed\n"); exit (1); } //nvchar char* terminator = ""; char* nvarchar = "ab"; int fOK = bcp_bind (dbproc, nvarchar, 0, -1, terminator, 1, SYBVARCHAR, 1); assert (fOK == SUCCEED); if( bcp_sendrow ( dbproc ) == FAIL ) { printf("Sendrow failed\n"); return -1; } int rows_sent = bcp_batch (dbproc); if (rows_sent == -1) { fprintf (stdout, "bcp_batch: failed\n"); exit (1); } printf( "Sent rows %i\n", rows_sent ); bcp_done (dbproc); dbexit (); return 0; } int err_handler (DBPROCESS * dbproc, int severity, int dberr, int oserr, char *dberrstr, char *oserrstr) { if( dberr ) { printf( "err_handler: Msg %d, Level %d", dberr, severity ); printf( "err_handler: %s", dberrstr ); } else { printf( "err_handler: DB-LIBRARY error:" ); printf( "err_handler: %s", dberrstr ); } return INT_CANCEL; } int msg_handler (DBPROCESS *dbproc, DBINT msgno, int msgstate, int severity, char *msgtext, char *srvname, char *procname, int line) { if( msgno > 0 ) { printf( "msg_handler: Msg %ld, Level %d, State %d", (long) msgno, severity, msgstate ); if (strlen (srvname) > 0) printf( "msg_handler: Server '%s', ", srvname ); if (strlen(procname) > 0) printf( "msg_handler: Procedure '%s', ", procname ); if (line > 0) printf( "msg_handler: Line %d", line ); } printf( "msg_handler: %s\n", msgtext ); if( severity > 10 ) { printf( "msg_handler: severity %d > 10, FATAL SQL error", severity ); } return 0; }
- [freetds] Found solution for Bulk insert problem with nvarchar(n) where n=odd number, Alexander Larkin, 07/01/2009
Archive powered by MHonArc 2.6.24.