首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果输入值在两个值之间,则显示结果

如果输入值在两个值之间,则显示结果
EN

Stack Overflow用户
提问于 2017-01-31 16:09:53
回答 2查看 108关注 0票数 1

我有一个SQL表,其中有三列"From“、"To”和"Equivalent“。每个值如下所示:

代码语言:javascript
运行
复制
From        To           Equivalent Value
1,001.00    2,000.00     200.00
2,001.00    3,000.00     300.00

现在,如果用户在textbox1中输入值"1,200.00“,它将向textbox2显示结果值"200.00”,因为这是"From“和"To”之间的相应值。

另一种情况是,如果用户在textbox1中输入值"2,500.00“,它将显示值"300.00”。

到目前为止,我已经尝试了这段代码,但没有成功:

代码语言:javascript
运行
复制
Dim conn As SqlConnection = SQLConn()
Dim da As New SqlDataAdapter
Dim dt As New DataTable

conn.Open()

Dim cmd As New SqlCommand("", conn)
Dim result As String

cmd.CommandText = "SELECT [Equivalent Value] FROM tblSSS"
result = IIf(IsDBNull(cmd.ExecuteScalar), "", cmd.ExecuteScalar)
da.SelectCommand = cmd
dt.Clear()
da.Fill(dt)

If result <> "" Then
    If TextBox1.Text >= dt.Rows(0)(1).ToString() And TextBox1.Text <= dt.Rows(0)(2).ToString() Then
        TextBox2.Text = dt.Rows(0)(3).ToString()

    End If
End If
EN

回答 2

Stack Overflow用户

发布于 2017-01-31 18:20:12

如果我没弄错的话,我想我会改变一些事情,这可能会对你有所帮助:

  1. 使用Using。这将在使用完.
  2. 使用SqlParameters后释放SQL对象。这将有助于筛选您的数据。
  3. 将删除SqlDataAdapter。在这种情况下,我觉得没有必要。
  4. IIf的用法。我将使用取代了IIf.

If

考虑到这些,我会看看下面这样的东西:

代码语言:javascript
运行
复制
Dim fromValue As Decimal = 0D
Dim toValue As Decimal = 0D

If Decimal.TryParse(TextBox1.Text, fromValue) AndAlso Decimal.TryParse(TextBox1.Text, toValue) Then

    Dim dt As New DataTable

    Using conn As SqlConnection = SQLConn,
          cmd As New SqlCommand("SELECT [Equivalent Value] FROM tblSSS WHERE [From] >= @From AND [To] <= @To", conn)

        cmd.Parameters.Add(New SqlParameter With {.ParameterName = "@From", .SqlDbType = SqlDbType.Decimal, .Value = fromValue})
        cmd.Parameters.Add(New SqlParameter With {.ParameterName = "@To", .SqlDbType = SqlDbType.Decimal, .Value = toValue})

        conn.Open()

        dt.Load(cmd.ExecuteReader)

    End Using

    If dt.Rows.Count = 1 Then
        TextBox2.Text = If(IsDBNull(dt.Rows(0).Item("Equivalent Value")), "0", dt.Rows(0).Item("Equivalent Value").ToString)
    End If

End If

注意Decimal.TryParse的用法

将数字的字符串表示形式转换为其等效的十进制形式。返回值表示转换成功还是失败。

这是假设数据库中从和字段的Decimal

现在来解释一下IIfIf之间的区别。即使语句为真,IIf也会执行语句的每一部分,而If只执行其中的一部分。我不会详细介绍,因为这里的许多人已经这样做了。看看这个answer

根据Andrew Morton's的评论,更符合OP在这里尝试的是使用ExecuteScaler的解决方案。

ExecuteScaler执行查询,并返回查询返回的结果集中第一行的第一列。其他列或行将被忽略。

记住这一点:

代码语言:javascript
运行
复制
'I reset the value of TextBox2.Text. You may not want to.
TextBox2.Text = ""

Dim fromValue As Decimal = 0D
Dim toValue As Decimal = 0D

If Decimal.TryParse(TextBox1.Text, fromValue) AndAlso Decimal.TryParse(TextBox1.Text, toValue) Then

    Using conn As SqlConnection = SQLConn,
          cmd As New SqlCommand("SELECT [Equivalent Value] FROM tblSSS WHERE [From] >= @From AND [To] <= @To", conn)

        cmd.Parameters.Add(New SqlParameter With {.ParameterName = "@From", .SqlDbType = SqlDbType.Decimal, .Value = fromValue})
        cmd.Parameters.Add(New SqlParameter With {.ParameterName = "@To", .SqlDbType = SqlDbType.Decimal, .Value = toValue})

        conn.Open()

        Try
            TextBox2.Text = cmd.ExecuteScalar().ToString()
        Catch ex As Exception

        End Try

    End Using

End If

我已经在ExecuteScaler MSDN文档中使用了这个示例。您可能希望更好地处理Try Catch上的异常,而不是浪费它。

您可能希望将此代码放在TextBox1.Leave方法或Button.Click方法上。这完全取决于你。

您可能需要做一些更改,但我认为这会给您一些关于如何继续编写代码的想法。

票数 2
EN

Stack Overflow用户

发布于 2017-01-31 19:34:13

希望这能帮上忙。

代码语言:javascript
运行
复制
Dim connetionString As String
Dim cnn As SqlConnection
Dim cmd As SqlCommand
Dim sql As String

connetionString = "Data Source=ServerName;Initial Catalog=DatabaseName;User ID=UserName;Password=Password"
sql = "SELECT [Equivalent Value] FROM tblSSS WHERE [FROM]<=" & Val(TextBox1.Text) & " AND [TO]>= " & Val(TextBox1.Text)

cnn = New SqlConnection(connetionString)
Try
    cnn.Open()
    cmd = New SqlCommand(sql, cnn)
    Dim count As Int32 = Convert.ToInt32(cmd.ExecuteScalar())
    cmd.Dispose()
    cnn.Close()

Catch ex As Exception
    MsgBox("Can not open connection ! ")
End Try
票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41952580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档