【问题标题】:How to make OleDB query read a colon :如何使 OleDB 查询读取冒号:
【发布时间】:2013-12-28 03:07:20
【问题描述】:

我正在开发一个 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 数据输入。然后就可以了。

【问题讨论】:

  • 使用OleDbCommand的参数
  • 为什么投反对票?您还可以通过将保留字括在 [] 中来使用保留字,例如 [time]。云郎:)

标签: mysql .net vb.net oledb


【解决方案1】:

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

【讨论】:

  • :) 只需以相同的方式为查询中的每个字段/值添加新参数
  • 我应该在ExecuteQuery sub 中添加什么?抱歉第一次使用参数。 ExecuteNonQuery() 和?
  • 让它工作,首先说,语法错误,我确实使用了参数,但后来我试图删除 time 数据。它可以节省。时间数据有问题吗?啊
  • 这就是为什么!你怎么知道的?
猜你喜欢
  • 2014-05-18
  • 1970-01-01
  • 1970-01-01
  • 2021-12-27
  • 2011-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多