【问题标题】:execute command to select a value from table执行命令从表中选择一个值
【发布时间】:2021-12-16 12:16:19
【问题描述】:

使用 db 访问和 Vb 网络,我应该想使用快速查询从我的表中提取一个值。其实我用这个代码

Dim conn As OleDb.OleDbConnection = DBConnect.getDbConnection()

        Try

            Dim selectSql = "select payed as P from mytable where Val(ID) = '4' "
                             
            Dim da As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter(selectSql, conn)
            Dim ds As DataSet = New DataSet
            da.Fill(ds, "mytable")
            Dim dt As DataTable = ds.Tables("mytable")
            Dim row As DataRow
               .....etc 

但是我记得在 vb6 中使用 ado,我可以用另一种方式完成它,就像这样 (CnMain.Execute("SELECT Payed as P From mytable Where Val(id) = '4'")("P"))

在 vbnet 中有没有办法通过一些 oledb 命令来获得相同的结果? 谢谢

【问题讨论】:

  • 当然是。看看 OleDBCommands docs.microsoft.com/en-us/dotnet/api/…
  • 您确定 Val(ID) 是正确的语法吗?列 id 的数据类型是什么?为什么要尝试将其转换为数字,然后将其与字符串进行比较?这对我来说没有多大意义。
  • 何史蒂夫,我使用了随意的值和语法。我只想解释两种不同的查询设置方法。真的我的问题不是上面的查询,它确实运行正常,而不是像我下面描述的那样写
  • @Hursey 阅读您的链接页面,我想我可以使用 executescalar。也许它会得到相同的结果。 (也许:-))
  • 是的,执行阅读器,给你很大的灵活性,但老实说,你目前正在做的填充数据集实际上是同一件事。它真的只是让你免于做所有的跑腿工作。什么才是最好的真正取决于您的确切要求和个人喜好

标签: sql vb.net ms-access


【解决方案1】:

我已经解决了写这样的事情

Try
            Dim sql As String = "Select amount from Moneydifference where val(rfticket) = '" & tTicket & "'"
            cmd = New OleDb.OleDbCommand(Sql, conn)
            Dim conto As Double = Convert.ToDouble(cmd.ExecuteScalar())
            cmd.Dispose()

            
        Catch ex As Exception
         ....
        End Try

【讨论】:

  • 您还需要阅读参数化查询而不是使用字符串连接。 docs.microsoft.com/en-us/dotnet/api/…。字符串连接是 SQL 命令无法按预期工作并且难以调试的第一大原因
  • 您可能不应该使用 Double 来赚钱。使用十进制。
  • @Mary 我刚刚尝试使用 var Decimal,但它会产生存储数字的问题。 Unsing Decimal,存储的数字格式为 1.16(带点)而不是 1,16,因此 Access mdb 将其存储为 116,00 如果我使用 Double 则不会发生这种情况
猜你喜欢
  • 2021-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-07
相关资源
最近更新 更多