使用DBI使用Perl连接到SQL Server吗?

时间:2019-08-19 19:35:46

标签: sql sql-server perl dbi

我正在尝试使用Perl DBI模块连接到SQL Server,我尝试了所有连接字符串格式,但Perl仍然抛出无效的连接字符串错误。

我已经尝试过perl僧侣网站上提供的代码段。

// Put this near the top of the file
#import <React/RCTUtils.h>

...

// Put this where you need access to the presented view controller
UIViewController *presentedViewController = RCTPresentedViewController();

预期结果是连接到数据库。

失败:[Microsoft] [ODBC SQL Server驱动程序] [DBNETLIB] SQL Server不存在或访问被拒绝。 [Microsoft] [ODBC SQL Server驱动程序] [DBNETLIB] ConnectionOpen(Connect())。 (SQL-01000)[状态现在是01000 01S00] [Microsoft] [ODBC SQL Server驱动程序] perl.pl第16行处的连接字符串属性(SQL-01S00)无效。无法打开数据库+:[Microsoft] [ODBC SQL服务器驱动程序] [DBNETLIB] SQL Server不存在或访问被拒绝。 (SQL-08001)[状态现在是08001,现在是01000]无效的连接字符串属性(SQL-01S00)

3 个答案:

答案 0 :(得分:2)

帖子中以+开头的行

+tabase=$database_name;uid=$database_user;pwd=$database_pass;'; 

+: $DBI::errstr\n";
错误地从perlmonks.org复制并粘贴了

。前面的+符号是约定,表示将长行分开。您应该删除+并将该行连接到上一行,这样您的代码才能读取

my $DSN = 'driver={SQL Server};server=$server_name;database=$database_name;uid=$database_user;pwd=$database_pass;'; 
my $dbh = DBI->connect("DBI:ODBC:$DSN") || die "Couldn't open database: $DBI::errstr\n";

答案 1 :(得分:0)

您的错误消息包含以下内容:

  

SQL Server不存在或访问被拒绝

您的设置代码包含以下内容:

connect()

'00 .120.124.1; 3181'不是有效的服务器名称或IP地址。您应该更正“ IP地址”部分(该地址不能以“ 00”开头),并将端口移到一个单独的参数中。

您还将用户名和密码作为DSN的一部分。我不知道DBD :: ODBC是否支持该用法(date.h中未提及),但是将它们作为my $server_name = '00.120.124.1'; # But this needs to be corrected my $server_port = 3181; my $database_name = 'abcd'; my $database_user = 'kkkk'; my $database_pass = 'password'; my $DSN = "driver={SQL Server};server=$server_name;port=$server_port;database=$database_name"; my $dbh = DBI->connect("DBI:ODBC:$DSN", $database_user, $database_pass) || die "Couldn't open database: $DBI::errstr\n"; 调用的单独参数更为传统。

总而言之,我认为您想要更多类似这样的东西:

$DSN

还要注意,我已经将用于创建$server_name变量的引号字符从单引号更改为双引号。变量不会以引号引起来,因此您在DSN中未获得def process_form_data(request, form_list): instance = Withdrawal() form_data = [form.cleaned_data for form in form_list] amount = form_data[0]['amount'] user = Withdrawal.objects.create(user=request.user, amount=amount) user.save() 等的值。

答案 2 :(得分:0)

更好的连接方法是使用DBD :: Sybase模块。该名称不建议使用,但SQL Server从Sybase继承。这样就可以避免ODBC。 http://metacpan.org/pod/DBD::Sybase#Using-DBD::Sybase-with-MS-SQL