http://www.perlmonks.org?node_id=1018357


in reply to Connecting to sqlserver2008 - DBD::Sybase connectivity and unixODBC issue

The original message "ct_connect(): directory service layer: internal directory control layer error: Requested server name not found" seems to be your main problem and it suggests it is coming from the library beneath DBD::Sybase (but you did not specify what you are using). Not that I use Sybase but it suggests to me that "abc.cde.corp.org\XYZ" is possibly wrong.

Switching to unixODBC is not going to make this problem go away. The "Can't open lib 'SQL Server'" error is referring to what you've put in your odbcinst.ini file where you named the Driver which is supposed to be a path to the ODBC Driver shared lib you want to use i.e. DRIVER={SQL Server} makes unixODBC look in your odbcinst.ini file for a Driver named "SQL Server" then it looks for the key "driver" and attempts to dynamically load that shared object. You error suggests the driver key in the odbcinst.ini file says "SQL Server" which is not a valid shared object to load.

e.g., a valid odbcinst.ini file looks like this:

[ODBC] Trace=no TraceFile=/tmp/unixodbc.log [SQL Server] Description=SQL Server ODBC driver Driver=/usr/local/easysoft/sqlserver/lib/libessqlsrv.so

Replies are listed 'Best First'.
Re^2: Connecting to sqlserver2008 - DBD::Sybase connectivity and unixODBC issue
by venu_hs (Novice) on Feb 12, 2013 at 13:46 UTC

    First of all thankyou for replying to my query. I have checked odbcinst.ini file and i have a different driver name Please find the below details

    [SQL Server Native Client 11.0] Description=Microsoft SQL Server ODBC Driver V1.0 for Linux Driver= /.../..../libsqlncli-11.0.so.1790.0 Threading=1 UsageCount=1

    Now i have modified the code as below

    my$dbh1 = DBI->connect("dbi:ODBC:DRIVER={SQL Server Native Client 11.0 +};Server=abc.cde.corp.org\\XYZ;Database=TEST;UID=$user;PWD=$password" +);

    Now i got a different error Please find the below

    DBI connect('DRIVER={SQL Server Native Client 11.0};Server=abc.cde.cor +p.org\XYZ;Database=TEST;UID=abc;PWD=defv','',...) failed: [unixODBC][ +Driver Manager]Driver's SQLAllocHandle on SQL_HANDLE_HENV failed (SQL +-IM004)

      You are better having a full path to the driver in the odbcinst.ini file as it will only work if your relative path is correct for the directory you are in.

      I don't use the ODBC driver you are using as the company I work for wrote its own SQL Server ODBC Driver. The error is saying the ODBC driver manager attempted to call SQLAllocHandle to allocate an environment and the driver returned the error IM004. This is almost always the very first call an ODBC application will make. Your driver probably needs something set in your shell environment e.g., an environment variable - but that is just a guess as I don't use that ODBC driver (what does the driver documentation say).

        The path in the odbcinst.ini file is an absolute path... i just removed it while posting here...sorry about that.. I am not sure if i have any documentation... As i am following up the process of DSN-less connection and ODBCINI file is not relevant here....Could you please provide me with more details...on how to implement this... Many Thanks