【发布时间】:2012-01-09 00:09:37
【问题描述】:
我设置了一个 SQL 来查询数据库并查找表中金额的总和,但是它没有返回任何内容,所有数据字段都是正确的,而且查询在运行方式上也是正确的,我认为问题是将它传递给数据读取器的变量,如果有人能纠正这个我会很感激。
这是代码,我觉得和datareader有关:
System.Web.Services.Protocols.SoapException:服务器无法处理请求。 ---
System.Data.OleDb.OleDbException:FROM 子句中的语法错误。在 System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams,对象和执行结果)在 System.Data.OleDb.OleDbCommand.ExecuteCommandText(对象& 执行结果)在 System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior 行为,对象和执行结果)在 System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior 行为,字符串方法)在 System.Data.OleDb.OleDbCommand.ExecuteReader(CommandBehavior 行为) 在 HSBC.CheckBal(Int64 帐号) 在 HSBC.CheckBalance(Int64 accountnumber) --- 内部异常堆栈跟踪结束 ---
描述:执行过程中发生了未处理的异常 当前的网络请求。请查看堆栈跟踪以获取更多信息 有关错误的信息以及它在代码中的来源。
异常详细信息:System.Web.Services.Protocols.SoapException: System.Web.Services.Protocols.SoapException:服务器无法 处理请求。 ---> System.Data.OleDb.OleDbException:语法错误 在 FROM 子句中。在 System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams,对象和执行结果)在 System.Data.OleDb.OleDbCommand.ExecuteCommandText(对象& 执行结果)在 System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior 行为,对象和执行结果)在 System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior 行为,字符串方法)在 System.Data.OleDb.OleDbCommand.ExecuteReader(CommandBehavior 行为) 在 HSBC.CheckBal(Int64 帐号) 在 HSBC.CheckBalance(Int64 accountnumber) --- 内部异常堆栈跟踪结束 ---
这是被调用的代码。
'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
【问题讨论】:
-
应用程序是否对数据库文件夹具有写入权限?没有它,它就无法创建 .ldb 文件,因此没有锁、没有访问权限、没有查询、什么都没有。一步一步打开连接后,检查 /database 文件夹并查看 ldb 文件是否存在。如果不是,则缺少权限。如果它的 web 我不记得它是 I_User 还是 W_User 用于 IIS。
-
在权限下的数据库中,它已读取设计、修改设计、管理、读取数据、更新数据、插入数据和删除数据,但它说它是以管理员身份运行的。另外我在数据库文件夹中没有 ldb 文件。权限在那里,因为我有另一个正在运行的服务正在保存到数据库和一个外部数据库
-
连接打开时会创建 .ldb 文件。手动打开 .mdb,您会看到 access 在该文件夹中创建了一个 .ldb。至于权限;如果这是一个网站,您需要 I_USER 或 I_Wuser 对数据库文件夹具有写入权限。无论 Web 服务在哪个帐户下运行,都需要对该文件夹的写入权限。 example