Skip to Content.
Sympa Menu

freetds - [freetds] Difference between tsql and libsybdb

freetds AT lists.ibiblio.org

Subject: FreeTDS Development Group

List archive

Chronological Thread  
  • From: Alberto Pulvirenti <alberto.pulvirenti AT crowdengineering.com>
  • To: freetds AT lists.ibiblio.org
  • Subject: [freetds] Difference between tsql and libsybdb
  • Date: Mon, 24 Sep 2012 12:33:05 +0200

Dear all,

after some time I tried to find a solution to this problem, I preferred to
send a request directly to this mailing list, since I suppose that experts
about freeTDS will be looking at it and find a solution maybe quite easily.

I have implemented a C++ class which makes use of the libsybdb to connect
to a SQL Server 2008 database and allow for some standard queries.
I had to use this class inside a network which made me available a SQL
Server DB in an instance that applies a Logon trigger.
Now, what happens is the following. If I try to access this instance using
the "tsql" executable which comes together to the freeTDS source package (I
am using 0.91, the latest stable release I found in the site), then I
manage to login correctly, I get the prompt and I can successfully execute
queries on the DB which is allowed for me to access.
Instead, if I try to log into the same DB on the same instance using my
class, it fails because it is kicked out by the logon trigger.
What I do is just creating a LOGINREC object and set it with what is needed
to access the DB (user, password, port, host, etc,), which is nothing more
and nothing less than what I put in the command line when I call tsql.

I called the admins of that SQL Server instance and the only help I got was
the log of some error message which is the following:

>> SELECT failed because the following SET options have incorrect settings:
'CONCAT_NULL_YIELDS_NULL, ANSI_WARNINGS, ANSI_PADDING'.
>> Verify that SET options are correct for use with indexed views and/or
indexes on computed columns and/or filtered indexes and/or query
notifications
>> and/or XML data type methods and/or spatial index operations

the point is that I don't understand if this is a critical failure point
and, if it is, what should I add to the connection to avoid this failure.
What I do is similar to what I have always seen in the examples about how
to set up a connection:

// allocate login params
LOGINREC *login; if ((login = dblogin()) == FAIL)
__LOG_ERROR_RETURN(CROWD_ERR_DB_FAILURE, log_preamble() << "failed to
initialize login object") // setup login params DBSETLUSER(login,
user.c_str()); DBSETLPWD(login, pwd.c_str()); DBSETLAPP(login,
"CrowdForce"); DBSETLCHARSET(login, "utf8"); DBSETLDBNAME(login,
db_name.c_str()); if (gethostname(hostname, max_len) == 0)
DBSETLHOST(login, hostname); else __LOG_ERROR_RETURN(CROWD_ERR_DB_FAILURE,
log_preamble() << "failed to retrieve hostname") // connect to DB engine
and free login object m_connection = dbopen(login, db_conn.c_str());
dbloginfree(login); if (m_connection == NULL)
__LOG_ERROR_RETURN(CROWD_ERR_DB_FAILURE, log_preamble() << "failed to open
connection")




Archive powered by MHonArc 2.6.24.

Top of Page