2012-01-09 6 views
1

SQL을 데이터베이스에 쿼리하여 테이블에있는 금액의 합계를 찾을 수 있지만 아무것도 반환하지 않고 모든 데이터 필드가 정확하며 쿼리를 실행하는 방법이 올바른지, 누구든지이 문제를 해결할 수 있다면 문제가 데이터 판독기의 변수에 전달된다고 생각합니다. 변수가 SQl 쿼리에서 데이터를 가져 오지 않습니다.

내가는 DataReader가 함께 할 수있는 뭔가 생각, 코드입니다 :

System.Web.Services.Protocols.SoapException : 서버가 요청을 처리 할 수 ​​없습니다. ---

System.Data.OleDb.OleDbException : FROM 절의 구문 오류입니다. System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult에서 System.Data.OleDb.OleDbCommand.ExecuteCommand에서 System.Data.OleDb.OleDbCommand.ExecuteCommandText (객체 & executeResult) (CommandBehavior를 에서 (tagDBPARAMS dbParams는 & executeResult 객체) 행동에 HSBC.CheckBal (INT64의 ACCOUNTNUMBER)에서 System.Data.OleDb.OleDbCommand.ExecuteReader (CommandBehavior를 동작) 에서 System.Data.OleDb.OleDbCommand.ExecuteReaderInternal (CommandBehavior를 행동, 문자열 방법)에 & executeResult)를 객체 HSBC.CheckBalance (Int64 계좌 번호) --- 내부 예외 스택 tra의 끝 ce ---

설명 : 현재 웹 요청이 일 때 처리되지 않은 예외가 발생했습니다. 오류에 대한 정보와 코드에서 오류가 발생한 위치에 대한 정보는 에 대한 스택 추적을 검토하십시오.

예외 정보 : System.Web.Services.Protocols.SoapException : System.Web.Services.Protocols.SoapException : 서버는 프로세스 요청에 없습니다. ---> System.Data.OleDb.OleDbException : 구문 오류 FROM 절에 있습니다. System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult에서 System.Data.OleDb.OleDbCommand.ExecuteCommand에서 System.Data.OleDb.OleDbCommand.ExecuteCommandText (객체 & executeResult) (CommandBehavior를에서 (tagDBPARAMS dbParams는 & executeResult 객체) 행동, HSBC.CheckBal에서 System.Data.OleDb.OleDbCommand.ExecuteReader (CommandBehavior를 동작) 에서 System.Data.OleDb.OleDbCommand.ExecuteReaderInternal (CommandBehavior를 행동, 문자열 방법)에서 & executeResult)을 객체 (INT64의 ACCOUNTNUMBER) HSBC.CheckBalance (Int64 계좌 번호) --- 여관 끝 예외 스택 추적 ---

이것은 호출되는 코드입니다.

'Creates a service web method 

    Private Function CheckBal(ByVal accountnumber As Long) As String 

     'Database(drivers, connections And commands) 
     Dim BalanceDr As OleDbDataReader 
     Dim BalanceConn As OleDbConnection 
     Dim BalanceCmd As OleDbCommand 

     'Database connection string 
     Dim Connx As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("../database/HSBC.mdb") & ";" 

     'SQL 

     Dim SQL As String = "SELECT Transaction_Amount FROM Transaction WHERE Account_Number =" & accountnumber & ";" 

     Dim bal As String 

     'Open the connection to the database 
     BalanceConn = New OleDbConnection(Connx) 
     BalanceConn.Open() 
     BalanceCmd = New OleDbCommand(SQL, BalanceConn) 

     'Create a DataReader that will return information. 
     BalanceDr = _ 
     BalanceCmd.ExecuteReader(CommandBehavior.CloseConnection) 

     If BalanceDr.Read() Then 
      'A row was returned 
      bal = BalanceDr(0) 
     Else 
      'A row was not returned 
      bal = "No Balance For Account Found" 
     End If 
     BalanceDr.Close() 
     Return SQL 
    End Function 
End Class 
+0

데이터베이스 폴더에 쓰기 권한을 응용 프로그램이 있나요? 그것 없이는 .ldb 파일을 만들 수 없으므로 아무런 잠금도없고 액세스도없고 아무 것도 아무것도 쿼리하지 않습니다. 하지만 연결을 연 후/database 폴더를 확인하고 ldb 파일이 있는지 확인하십시오. 그렇지 않은 경우 사용 권한이 누락됩니다. 그것의 웹 경우 기억이 안나요 I_User 또는 IIS에 대한 W_User. – xQbert

+0

데이터베이스에서 권한 읽기, 디자인 수정, 관리, 데이터 읽기, 데이터 삽입, 데이터 삽입 및 삭제 된 데이터 삭제가 있지만 관리자로서 실행 중임을 나타냅니다. 또한 데이터베이스 폴더에 ldb 파일이 없습니다. 데이터베이스 및 외부 데이터베이스에 저장하는 다른 서비스가 실행되고 있으므로 사용 권한이 있습니다. – user1134409

+0

연결이 열릴 때 .ldb 파일이 만들어집니다. .mdb를 수동으로 열면 해당 폴더에 .ldb가 만들어집니다. 허가에 관해서는; 이것이 웹 사이트 인 경우 I_USER 또는 I_Wuser에 데이터베이스 폴더에 대한 쓰기 권한이 있어야합니다. webservice가 실행중인 계정이 무엇이든간에 폴더에 대한 쓰기 권한이 필요합니다. [예] (http://www.justskins.com/forums/web-server-permissions-for-118149.html) – xQbert

답변

0

사용 권한 설정 방법.

다음은 권한이 작동하는 방식과 사용자가 궁금해 할 때 서버 관리자가 설정하는 방법에 대한 간략한 요약입니다.

ASP 페이지는 웹 브라우저를 통해 익명 사용자가 액세스합니다. 사용자가 웹 브라우저를 통해 이러한 페이지에 액세스하면 IIS는 (기본적으로) iUSR_ 또는 "everyone"이라는 Windows NT 계정을 사용합니다.

서버에 있어야하는 권한을 설정하고 데이터베이스가있는 폴더로 이동하려면 마우스 오른쪽 단추를 클릭하고 속성을 선택하십시오. 그런 다음 해당 계정에 데이터베이스가있는 폴더에 대한 사용 권한을 변경하거나 사용 권한을 수정합니다. 변경 또는 수정은 ... r w x d (읽기/쓰기/실행/삭제)입니다. 나중에 동일한 디렉토리에 다른 데이터베이스를 넣으면 권한을 상속 받게되므로 다시 묻지 않아도됩니다. 디렉토리를 삭제하고 다시 만들면 권한이 손실되고 다시 설정해야합니다.

이 기능을 사용하면 ASP 스크립트와 데이터베이스가 제대로 작동하지 않을 때 어떤 일이 벌어지고 있는지 더 잘 이해할 수 있기를 바랍니다. SOURCE

옵션 2) 제트는 거래를 예약어로 취급합니다. []의에 넣어 시도

SELECT Transaction_Amount FROM [Transaction] WHERE Account_Number =" & accountnumber & ";" 
1

문제는 또한 데이터베이스의 테이블 이름입니다 Transaction이 예약 된 단어이다; 이 때문에 구문 오류가 발생합니다.

문제를 해결할 수 대괄호로 테이블 이름을 둘러싸 SQL 문을 변경 :

Dim SQL As String = "SELECT Transaction_Amount FROM [Transaction] WHERE Account_Number =" & accountnumber & ";" 
관련 문제