从sql-vb.net检索最大值 [英] Retrieving maximum value from sql-vb.net

查看:123
本文介绍了从sql-vb.net检索最大值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试从sql中检索最大值-vb.net

I am trying to retrieve a maximum value from sql - vb.net

这是我的代码:我收到此错误:

This is my code: I get this error:

无法将类型为'System.DBNull'的对象强制转换为类型 'Oracle.DataAccess.Client.OracleDataReader'

Unable to cast object of type 'System.DBNull' to type 'Oracle.DataAccess.Client.OracleDataReader'

请帮助. :(

Dim cmd2 As New OracleCommand
cmd2.Connection = conn
'SELECT MAX(LASTNO) FROM d001005 where lbrcode = '104' and CODE1 = 'CASH' and lnodate = '14-NOV-08' 
Dim datepara As String = Date.Now.ToString("dd-MMM-yy")
'datepara = "14-NOV-08"
cmd2.CommandText = "SELECT MAX(LASTNO) FROM d001005 where lbrcode = '" + lbr + "' and CODE1 = 'CASH' and lnodate = '" + datepara + "'"
cmd2.CommandType = CommandType.Text
Dim dr2 As OracleDataReader = cmd2.ExecuteScalar
Dim result As Decimal = dr2.Item("LASTNO")

推荐答案

您正在使用集合函数查找名称为"LASTNO"的项目取最大值.此外, ExecuteScalar 返回第一行的第一值!另一点是,您应该使用 OracleParameter 用于任何类型的动态语句,防止SQL注入

There is no item with the name "LASTNO" as you are using an aggregate function to find out the maximum value. Furthermore ExecuteScalar returns the first value of the first row! Another point is, that you should use OracleParameter for any kind of dynamic statement, to prevent SQL injection!

Dim cmd2 As New OracleCommand
cmd2.Connection = conn
Dim datepara As String = Date.Now.ToString("dd-MMM-yy") ' see hint below

cmd2.CommandText = "SELECT MAX(LASTNO) as maxLastNo FROM d001005 where lbrcode = :lbr and CODE1 = 'CASH' and lnodate = :lnodate"

' add parameter value directly
cmd2.Parameters.AddWithValue("lbr", lbr)   ' lbr seems to be your var which holds the according value

' or create parameter object and set type and add it afterwards
Dim param as new OracleParameter
param.ParameterName = "lnodate"
param.Value = datepara    ' or any other value (furthermore: no need to convert to string)
param.ParameterType = OracleType.DateTime ' or OracleType.Varchar which is set by default
cmd2.CommandType = CommandType.Text

Dim val = cmd2.ExecuteScalar()
if Not val is Nothing then
    Dim maxValue as Decimal = Convert.ToDecimal(val)
    Console.WriteLine(maxValue)
End if

这篇关于从sql-vb.net检索最大值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆