如何使OleDB查询读取冒号:

时间:2013-12-28 03:07:20

标签: mysql .net vb.net oledb

我正在开发GPS应用程序,我需要解析发送到应用程序的爆炸字符串  但是,OleDB中的SQL查询无法将:识别为字符。 - 我认为这是错误

我在.accdb上添加了一个字段Time,其中文本为数据类型...

04T16:18:42Z

这是gps发送的时间数据。
但如果我使用它,我会得到语法错误(我只是做了这个,我使用vb.net) -
insert into myTable(Time) values ('" & txtTime.Text & "')
这是我使用的查询。我昨天发布了错误,似乎是导致语法错误的数据 我该怎么做才能让它发挥作用?或者做一些像改变时间格式,拆分,重写的事情?我的主要目标是将其保存到数据库中。感谢

更新:这是我保存的代码,您可以使用parameters重新排列吗 -

query = "INSERT INTO tblGPSRoutes(Time,Latitude,Longitude,Elevation,Accuracy,Bearing,Speed)"
query &= " VALUES ('" & txtTime.Text & "','" & txtLat.Text & "','" & txtLong.Text & "','" & txtElev.Text & "','" & txtAccuracy.Text & "','" & txtBearing.Text & "','" & txtSpeed.Text & "')"


        databaseFunctions.ExecuteQuery(query)
        MessageBox.Show("Data Saved Successfully.")

UPDATE2:现在我正在使用参数:

Dim con As OleDbConnection
    con = New OleDbConnection
    con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source = " & Path.Combine(Application.StartupPath, "markers.accdb")
    con.Open()
    Dim query As String = "INSERT INTO tblGPSRoutes(Latitude,Longitude,Elevation,Accuracy,Bearing,Speed) VALUES (@lat,@long,@elev,@acc,@bearing,@speed)"
    Using cmd As New OleDbCommand(query, con)
        With cmd.Parameters
            '.AddWithValue("@time", txtTime.Text)'
            .AddWithValue("@lat", txtLat.Text)
            .AddWithValue("@long", txtLong.Text)
            .AddWithValue("@elev", txtElev.Text)
            .AddWithValue("@acc", txtAccuracy.Text)
            .AddWithValue("@bearing", txtBearing.Text)
            .AddWithValue("@speed", txtSpeed.Text)
        End With
        cmd.ExecuteNonQuery()
    End Using

首先说,语法错误..然后我删除了time数据输入。那就行了。

1 个答案:

答案 0 :(得分:2)

Time是Access中的保留字。因此,您不能将其用作列名。(我在示例中将其更改为MyTime

将一些应用程序的变量添加到SQL查询时使用参数 然后,在字符串值

中使用特殊字符时,可以避免SQL injections和一些错误
Dim query As String = "insert into myTable(MyTime, Latitude) values (@TextTime, @Latitude)"
//Then create parameters for your databaseFunctions's functions
Dim parameters As New List(Of OleDbParameters)()
With parameters
    .Add(New OleDbParameter("@TextTime", txtTime.Text))
    .Add(New OleDbParameter("@Latitude", txtLat.Text))
End With
databaseFunctions.ExecuteQuery(query, parameters.ToArray())
MessageBox.Show("Data Saved Successfully.")

但是,您需要添加/更改databaseFunctions.ExecuteQuery(query) - 函数以获取两个参数

Public Sub ExecuteQuery(query As String, params As OleDbParameters())
    //Here add parameters to OleDbCommand object and execute command
End Sub