Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I connect with Perl to SQL Server?

Tags:

perl

dbi

I have a user id, password, database name and datasource details. I want to connect with Perl to a MSSQL server. I just used the following snippet, but I am getting an error.

#!/usr/bin/perl -w
use strict;

use DBI;

my $data_source = q/dbi:ODBC:192.168.3.137/;
my $user = q/bharani/;
my $password = q/123456/;

# Connect to the data source and get a handle for that connection.
my $dbh = DBI->connect($data_source, $user, $password)
    or die "Can't connect to $data_source: $DBI::errstr";

My error is:

DBI connect('192.168.3.137','bharani',...) failed: [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (SQL-IM002) at my sqlconnect.pl line 14
Can't connect to dbi:ODBC:192.168.3.137: [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (SQL-IM002) at mysqlconnect.pl line 14.

The SQL server runs on another system, I am just trying to connect with above details. Please tell me, should I crease DSN in my system, or is anything missing in my program?

like image 248
Bharanikumar Avatar asked Feb 05 '11 07:02

Bharanikumar


People also ask

How do I connect to a SQL Server connection?

Connect to a SQL Server instanceStart SQL Server Management Studio. The first time you run SSMS, the Connect to Server window opens. If it doesn't open, you can open it manually by selecting Object Explorer > Connect > Database Engine. For Server type, select Database Engine (usually the default option).


1 Answers

I am on Ubuntu (20.04) and followed the instructions to install SLQ Server in a docker container: https://docs.microsoft.com/en-us/sql/linux/quickstart-install-connect-docker?view=sql-server-ver15&pivots=cs1-bash

I created the TestDB and the table Inventory as per the tutorial.

I installed the ODBC driver following https://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server?view=sql-server-ver15

The driver library file was /opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.5.so.2.1

With that, the following script successfully connects to the DB and returns the content of the table:

 #!/usr/bin/perl
use strict;
use warnings;

use DBI;
my $user = 'SA';
my $password = '<YourNewStrong@Passw0rd>';

my $dbh = DBI->connect("dbi:ODBC:Driver={/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.5.so.2.1};Server=localhost;Database=TestDB;UID=$user;PWD=$password");

my $sth = $dbh->prepare("SELECT * FROM Inventory");
$sth->execute();

while ( my @row = $sth->fetchrow_array ) {
      print "@row\n";
}
like image 74
Matthias Bloch Avatar answered Oct 04 '22 18:10

Matthias Bloch