例如,我在一列中有10,20和30,然后我希望所有这些都乘以3。
con.Open()
cmd.CommandText = " select * from pawns where item_no = '" & txtID.Text & "' and second_date <= NOW(); "
dr = cmd.ExecuteReader
If dr.HasRows Then
dr.Read()
b = dr.Item("total_amount") * 3
dr.Close()
End If
答案 0 :(得分:1)
这可以在SQL中完成,如下面示例代码中所示,其中假设没有空值。所有代码都有Option Strict On并使用xml文字来创建sql语句。
注意:这是通过SQL-Server完成的,但同样适用于通过托管.NET数据提供程序的所有数据库。
Dim SearchValue As Integer = 12
' create nicely formatted statement with xml literals
Dim SelectStatement As String =
<SQL>
SELECT
ID,
item_no,
total_amount,
ItemDescription,
([total_amount]*3) AS Total
FROM Table1
WHERE item_no = @ItemIdentifier));
</SQL>.Value
Using cn As New SqlClient.SqlConnection With {.ConnectionString = "TODO"}
Using cmd As New SqlClient.SqlCommand With {.Connection = cn, .CommandText = SelectStatement}
' strong type parameter optionally use AddWithValue
cmd.Parameters.Add(New SqlClient.SqlParameter With
{
.ParameterName = "@ItemIdentifier",
.SqlDbType = SqlDbType.Int,
.Value = SearchValue
}
)
cn.Open()
Dim reader As SqlClient.SqlDataReader = cmd.ExecuteReader
If reader.HasRows Then
While reader.Read
Console.WriteLine("Description: {0} Total: {1}",
reader.GetString(3),
reader.GetInt32(4))
End While
reader.Close()
End If
End Using
End Using
SQL也可以按如下方式完成
Dim SelectStatement As String =
"SELECT ID, item_no, total_amount, ItemDescription, (total_amount * 3) AS Total " &
"FROM Table1 WHERE item_no = @ItemIdentifier));"
建议使用SELECT *来选择数据,而是始终指定所需的字段。
答案 1 :(得分:0)
我认为您的问题可能是SqlDataReader.Item返回一个对象,而不是一个数字。在这一点上,你的糟糕代码不知道,如果dr.Item("total_amount")
将返回一个字符串,一个字节数组,一个整数,一个日期......它正在等待 - 屏住呼吸 - 为你。 ..错误...告诉它。
所以......告诉它:
b = CType(dr.Item(“total_amount”),Double)* 3
除非total_amount是一个可以为空的bigint值...然后,你还有更多工作要做。
If IsDBNull(dr.Item("total_value")) Then
Return 0;
Else
Return CType(dr.Item("total_value"), long)
End If
当然,在这一点上......你是如此接近扩展方法,你几乎闻到它!如果你能打电话给dr.GetOrDefault(of long)("total_value",0)
,那会不会更容易......是的。那很酷。比如...... dr.GetSqlInt64(0),但是列名是......
<System.Runtime.CompilerServices.Extension()>
Function GetOrDefault(Of T)(dr As SqlDataReader, name As String, [default] As T) As T
If IsDBNull(dr.Item(name)) Then
Return [default]
Else
Return CType(dr.Item(name), T)
End If
End Function
呀。那很酷。你应该写那样的东西。它节省了很多代码时间。