logologologo Арифметика электронного бизнеса
internet business bureau
   
о компанииинтернет услугиразработка сайтовклиентаминфо

 
   СТАТЬИ       ССЫЛКИ        ОБЗОР ЛИТЕРАТУРЫ        СЕМИНАРЫ    
 
Список статей

КОНТАКТЫ:
  тел.:  (495) 951-33-73
  тел.:  (495) 951-27-50
  e-mail: info@ibb.ru
ТЕХПОДДЕРЖКА
  тел.: (495) 772-43-24
  e-mail: support@ibb.ru

СТАТЬИ

КАК ОБРАЩАТЬСЯ С КЛИЕНТСКИХ МЕСТ НА LINUX (UNIX) К БАЗЕ MS SQL (WINDOWSNT)?

Автор: Vadim Grepan
email: kezal@ibb.ru, kezal@mail.ru
2:5020/653@fidonet.org

Update Date: 09-06-2000

Все пожелания, деньги, угрозы и благодарности можно высылать по адресам, указанным выше.



Наиболее простой способ - использовать Perl и следующий набор модулей:
DBD-Sybase-0.22.tar.gz (www.cpan.org)
DBI-1_13_tar.gz (www.cpan.org)
freetds-0_50.tgz (www.freetds.org)

Если вы работаете с RedHat Linux, то, возможно, вы предпочтёте использовать RPM-модули.

Также вам понадобится компилятор C, лучше, если это будет gcc.
(SUN SPARC и Solaris Intel: gcc version 2.95.2 19991024 (release))
(Linux RedHat: gcc version egcs-2.91.66 19990314/Linux (egcs-1.1.2 release))

Также понадобится интрепретатор Perl.
perl, version 5.005_03

Данный набор был успешно установлен и функционировал (по кр. мере в некотором минимально достаточном наборе) на платформах:


Linux RedHat 6.1 (kernel 2.2.5-15)
SunOS 5.7 i86pc i386 i86pc
SunOS 5.7 sun4u sparc SUNW,Ultra-Enterprise

В качестве сервера базы данных использовалась машина WindowsNT и сервер MS SQL версии 7.00.623

1. Распаковать и растарить каждый из пакетов. Например:
tar zxvf DBD-Sybase-0.22.tar.gz
или
gunzip DBD-Sybase-0.22.tar.gz
tar DBD-Sybase-0.22.tar

2. Прочитать файлы README и INSTALL, который там найдете

3. Установить переменную окружения $SYBASE. Например, для sh/bash/ksh

	SYBASE=/usr/local/freetds
	export SYBASE
Это директория будет использоваться для установки клиентской
библиотеки freetds

4. Собрать freetds. Для работы с MSSQL 7.0.* следует использовать следующую конструкцию

    $ ./configure --with-tdsver=4.2
    $ make
    $ make install

Скорее всего, при компиляции вы получите сообщения о нехватке некоторых библиотек. Это не страшно, если конечно tcl не заменяет вам perl ;)

5. Исправить конфигурационный файл $SYBASE/interfaces, указав там тип соединения, IP-адрес сервера БД, порт. В приведенном примере это имя соединения ms2. Остальные строки можно оставить без изменения

	==== $SYBASE/interfaces ==================== cut ====
	JDBC
    	    query tcp ether 192.138.151.39 4444
        	master tcp ether 192.138.151.39 4444

	myserver
    	    query tcp ether 127.0.0.1 4000
        	master tcp ether 127.0.0.1 4000

	ms2
    	    query tcp ether 212.42.32.164 1433
        	master tcp ether 212.42.32.164 1433
	============================================== cut ===

6. Устанавливаем DBI-интрефейс, предварительно прочитав имеющийся в дистрибутиве README:

	
    cd DBI_source_dir
    perl Makefile.PL
    make
    make test

    make install

7. Устанавливаем DBD-драйвер (Sybase, разумеется)

 
    cd DBD_source_dir 
    perl Makefile.PL
    make
    make test
    make install

8. Пишем тестовую программку на Perl

###################################################
#!/usr/bin/perl -w
#

use DBI;
use DBD::Sybase;
use strict;

$ENV{SYBASE}='/usr/local/freetds';

# Раскомментируйте следующую строку, если не хотите связываться
#   с внешним  конфигурационным файлом
#my $dsn="DBI:Sybase:server=212.42.32.164;port=1433;database=ms2";
#
my $dsn = "DBI:Sybase:server=ms2";
my $user='ttt';
my $password='trust911';

## DBI -> trace(2);

my $dbh  = DBI->connect($dsn, $user, $password,
                   { RaiseError => 1, AutoCommit => 0 })
    or die "$DBI::errstr\n";
$dbh->{'syb_flush_finish'} = 1;
    
if ($dbh) { print "\nConnect OK!\n"; }

    ##  Вызов нескольких процедур с обращением к БД
    ##&do_query1;
    ##&do_query2;

    &do_query_test1;
    &do_query_test3;
        
$dbh->disconnect;

######################
#  Простой запрос к БД
##
sub do_query1 {
    my $field_1;
    my $field_2;

    my $sql_str = "SELECT * FROM VotesBase";
    my $sth = $dbh->prepare($sql_str);
    my $rv = $sth->execute || 
       die "Can't execute statement: $DBI::errstr";
                   
    print "Query will return $sth->{NUM_OF_FIELDS} fields.\n\n";
    print "Field names: @{ $sth->{NAME} }\n";
                                     
    while (($field_1, $field_2) = $sth->fetchrow_array) {
        print "$field_1: $field_2\n";
    }
}

sub do_query2 {
    my $field_1;
    my $field_2;
        my $par1 = 5;
        my $par2 = 0;
        
    my $sql_str = "exec test3 $par1, \$par2 OUTPUT";
    my $sth = $dbh->prepare($sql_str);
    my $rv = $sth->execute || 
       die "Can't execute statement: $DBI::errstr";
                   
        print "Result1: ". $par1;
        print "Result2: ". $par2;
        
#    print "\nQuery will return $sth->{NUM_OF_FIELDS} fields.\n\n";
#    print "Field names: @{ $sth->{NAME} }\n";
                                     
#    while (($field_1, $field_2) = $sth->fetchrow_array) {
#               print "$field_1: $field_2\n";
#    }

   
    return 0;
}

sub do_query_test1 {
    my $field_1;
    my $field_2;
        my $par1 = 8;
        my $par2 = 0;
        
    my $sql_str = "exec test1 $par1";
    my $sth = $dbh->prepare($sql_str);
    my $rv = $sth->execute || 
       die "Can't execute statement: $DBI::errstr";
                   
        print "Result1: ". $par1;
        
    print "\nQuery will return $sth->{NUM_OF_FIELDS} fields.\n\n";
    print "Field names: @{ $sth->{NAME} }\n";
                                     
    while (($field_1, $field_2) = $sth->fetchrow_array) {
                print "$field_1: $field_2\n";
    }

   
    return 0;
}

sub do_query_test3 {
    my $field_1;
    my $field_2;
        my $par1 = 8;
        my $par2 = 0;
        
    my $sql_str = "exec test3 $par1, $par2";
    my $sth = $dbh->prepare($sql_str);
    my $rv = $sth->execute || 
       die "Can't execute statement: $DBI::errstr";
    my @results = $sth->func('syb_output_params');
                   
        print "\nResults: ". @results;
        
    return 0;
}




КОНТАКТЫ   |   ХОСТИНГ   |   ВЫДЕЛЕННЫЕ ЛИНИИ   |   ДОМЕНЫ   |   РАЗРАБОТКА САЙТОВ   |   ТЕХПОДДЕРЖКА   |   СТАТЬИ
Rambler's Top100 Яндекс цитирования Rambler's Top100
© 2000-2016 Internet Business Bureau
Все права защищены