我正在创建一个使用foxpro作为数据库的系统。当我想将VFP数据库与Visual Studio连接时,我不断收到此错误error [42S02][microsoft][ODBC visual foxpro driver] not a table
。当我在Visual Studio中添加数据连接时,它显示连接成功,但是当我尝试打开表时,它显示错误。
这是一个使用数据库foxpro 9的VB.Net系统。我已经使用mysql作为数据库并且可以正常工作,但是当我尝试使用foxpro数据库时,我得到了一个错误。
Imports System.Data.Odbc
Imports System.Data.OleDb
Public Class login
Private Sub btnEnter_Click(sender As Object, e As EventArgs) Handles btnEnter.Click
Dim oConn = CreateObject("adodb.connection")
oConn.ConnectionString = "Provider=vfpoledb;DSN=visual_foxpro"
oConn.Open()
Dim conn = New OleDbConnection()
Dim cmdString As String = "SELECT * FROM `login` WHERE `staffID`= @staffid AND `staffName`= @staffname"
Dim cmd As New OleDbCommand(cmdString, oConn)
cmd.Parameters.Add(New OleDbParameter("staffID", CType(txtStaffID.Text, String)))
cmd.Parameters.Add(New OleDbParameter("staffName", CType(txtStaffID.Text, String)))
Dim adapter As New OleDbDataAdapter(cmd)
Dim table As New DataTable()
adapter.Fill(table)
If table.Rows.Count = 0 Then
MessageBox.Show("Staff ID or Staff Name not available")
Else
MessageBox.Show("Welcome " & txtStaffName.Text)
Dim form As New formLeave
form.PassStaffid = txtStaffID.Text
form.PassStaffName = txtStaffName.Text
form.Show()
Me.Hide()
End If
End Sub
End Class
我希望系统可以使用数据库登录。
答案 0 :(得分:0)
6.x以后的VFP数据库版本没有Microsoft的官方ODBC驱动程序。如果必须使用ODBC,则可以从Sybase ADS等源中找到替代驱动程序。我成功地使用了OLEDB。
虽然您的代码可能适用于MySQL,但这不是您应该编写的方式。另外,它是MySQL特有的,它在MS SQL Server或postgreSQL中也不起作用。您应该阅读所用后端上的文档。在VFP(或MS SQL Server,postgreSQL ...)中,您不使用back tic作为表和字段名称标识符。在VFP中,如果需要的话,要使用名称标识符,可以使用单引号,双引号或方括号,但是需要用括号括起来(并且仅用于SQL查询中的表名)。无论如何,最简单的方法就是根本不使用标识符。
此外,对于ODBC或OLEDB查询,您需要使用?作为参数占位符。在MySQL中,通常也无法使用@staffID,但是驱动程序制造商决定为这些后端提供支持。
从您的messageBox消息中,看起来您希望为该查询获得一行(我不知道为什么如果staffId是主键,为什么同时使用staffId和staffName)。无论如何,这是您在VB.Net中的查询:
Imports System.Data.OleDb
Public Class login
Private Sub btnEnter_Click(sender As Object, e As EventArgs) Handles btnEnter.Click
Dim strConn As String = "Provider=VFPOLEDB;Data source=c:\MyDataFolder\"
Dim strQuery As String = <sql>SELECT *
FROM login
WHERE staffID=? AND staffName=?
</sql>
Using cn As New OleDbConnection(strConn)
Using cmd As New OleDbCommand(strQuery, cn)
cmd.Parameters.Add("@staffid", OleDbType.VarChar).Value = txtStaffID.Text;
cmd.Parameters.Add("@staffname", OleDbType.VarChar).Value = txtStaffName.Text;
cn.Open()
Dim rdr As OleDbDataReader = cmd.ExecuteReader()
If rdr.Read()
MessageBox.Show("Welcome " & txtStaffName.Text)
Dim form As New formLeave
form.PassStaffid = txtStaffID.Text
form.PassStaffName = txtStaffName.Text
form.Show()
Me.Hide()
Else
MessageBox.Show("Staff ID or Staff Name not available")
End If
cn.Close()
End Using
End Using
End Sub
End Class