2011-07-07 42 views
0

我有用于将数据直接导入到数据库中的HTML格式的Perl文件。该文件被称为'demo.htm'。该脚本在没有数据库连接部分的情况下工作,它剥离了我不需要的部分。然而,现在我正在尝试读取html文件并将其输入到数据库中,并且这些改编不起作用。数据库,用户和密码都是“demo”,它使用的是SQL Server 2008 R2数据库。使用Perl上传到数据库中

use warnings; 
use strict; 
use DBI; 
use HTML::TreeBuilder; 

open (FILE, "demo") || die "couldn't open the file!"; 
open (F1, ">demo.htm") || die "couldn't open the file!"; 
open (F2, ">demo2.csv") || die "couldn't open the file!"; 

# database name, user and password 
my $data_source = q/dbi:ODBC:demo/; 
my $user = q/demo/; 
my $password = q/demo/; 

# 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"; 

print F1 "Name\|Lives In\|Commented\n"; 
print F2 "Name\|Lives In\|Commented\text\n"; 

my $tree = HTML::TreeBuilder->new_from_content( do { local $/; <DATA> }); 

for ($tree->look_down('class' => 'postbody')) 
{  
my $location = $_->look_down('class' => 'posthilit')->as_trimmed_text;  

my $comment = $_->look_down('class' => 'content')->as_trimmed_text;  

my $name  = $_->look_down('_tag' => 'h3')->as_text;  

$name =~ s/^Re:\s*//;  $name =~ s/\s*$location\s*$//;  

print "Name: $name\nLives in: $location\nCommented: $comment\n"; } 

# This query generates a result set with one record in it. 
#my $sql = "SELECT 1 AS test_col"; 

my $sql = "insert into demo2 values \(Name, Lives In, Comeented, text)"; 

print $sql; 
print "\n"; 

# Prepare the statement. 
my $sth = $dbh->prepare($sql) 
or die "Can't prepare statement: $DBI::errstr"; 

# Execute the statement. 
$sth->execute(); 

} 
print $b; 
print " end\n"; 

# Disconnect the database from the database handle. 
$dbh->disconnect; 

任何帮助我在哪里出错了,将不胜感激。 html的一个例子是 -

<div class="postbody">   <h3><a href "foo">Re: John Smith <span class="posthilit">England</span></a></h3>   <div class="content">Is C# better than Visula Basic?</div>  </div> 
+0

“这些适应不起作用”可能更有用的解释他们不工作的方式。你看到了什么意想不到的行为?有没有错误信息? –

回答

2

在你的SQL查询中,你应该使用你提取的数据。

my $sql = "insert into demo2 values (?,?,?,?)"; 
... 
$sth->execute($name,$location,$comment,'');