2014-11-03 7 views
1

오케이 저는 몇 시간 동안이 작업을 시도했지만 제대로 작동하지 않습니다. 나는 데이터베이스를 열려고 간단한 펄 스크립트가 : 명령 줄에서 실행할 때IIS에서 SQLite 데이터베이스에 액세스 할 수 없습니다.

my $db; 
my $cgi = new CGI; 
$db = DBI->connect("dbi:SQLite:dbname=test.db") or do 
{ 
    print $cgi->header("text/plain", "500 Internal Server Error"); 
    print "Can't connect to database."; 
}; 

스크립트는 잘 작동을하지만, IIS 작업을 거부합니다. 나는 스크립트와 데이터베이스를 모두 C : \ inetpub \ wwwroot \ test에 넣고 전체 테스트 디렉토리 보안을 Everyone에 대한 모든 권한으로 변경했습니다. 여전히 작동하지 않습니다. 파일에 액세스하는 방법을 모르겠습니다.

+0

현재 작업 디렉토리가'C : \ inetpub \ wwwroot \ test'인지 확인 했습니까? 'connect'에서 파일의 경로를 완전히 지정하는 것은 어떨까요? 'dbi : SQLite : dbname = : memory :'작동합니까? '$ DBI :: errstr'에 무엇이 있습니까? DBD :: SQLite가 설치되어 있습니까? – Borodin

+0

errstr = "데이터베이스 파일을 열 수 없습니다", 예 SQLite가 설치되었으므로 명령 줄에서 스크립트를 실행할 수 있습니다. 예, 동일한 동작으로 전체 경로를 변경하려고했습니다. using : memory : 연결선을 작동시킨다.하지만 준비하려고하면 "메서드를 호출 할 수 없다"는 "정의되지 않은 값으로 실행한다" – Dendory

+0

문을 준비하고 'execute'를 호출하면 실패하는 것입니까? '문 핸들에서 실패하면 실패합니까? 이것은 SQL 문법이 잘못되었음을 의미하지만 아마도이 문제와 관련이 없습니다. 'test.db'가 이미 존재할 것으로 기대하십니까? ''$ fh ',' ','test.db '또는 die $!'를 열면 어떻게됩니까? – Borodin

답변

0

C:\inetpub\wwwroot\test\test.db/inetpub/wwwroot/test/test.db으로 대체하여 마침내 3 시간 후 관리했습니다.

한숨. 이유는 모르겠다.

+1

* 큰 따옴표로 묶은 문자열에 백 슬래시가 있으면 사라질 것입니다. 그들을 두 배로 늘리거나, 작은 따옴표를 사용하는 것이 좋습니다. 중요하지 않은 문자열에는 사용하기 전에 인쇄하여 생각하는 내용이 포함되어 있는지 확인하는 것이 가장 좋습니다. 드라이브 문자를 다시 입력해야합니다. 'My $ dbname = 'C : \ inetpub \ wwwroot \ test \ test.db'를 시도하십시오. 내 $ db = DBI-> connect ("dbi : SQLite : dbname = $ dbname"); – Borodin

관련 문제