【问题标题】:Read Data from SQL Server only can Integer从 SQL Server 读取数据只能是 Integer
【发布时间】:2015-10-31 11:32:31
【问题描述】:

我有从 SQL Server 读取数据的程序,但是当我想读取数据时,我只能读取整数数据 varchar 在我的代码中有错误。

我的代码:

con.Open()
Dim cmd As New SqlCommand(("SELECT id, Cash FROM tbl_UserStatus WHERE id= " & TextBox1.Text), con)
Dim myreader As SqlDataReader
myreader = cmd.ExecuteReader()
myreader.Read()
If myreader.HasRows Then
    TextBox2.Text = myreader.Item("id").ToString
    TextBox3.Text = myreader.Item("Cash").ToString
End If
con.Close()
TextBox1.Clear()

当我读取像 2222 这样的数据 id Integer 时,代码可以工作,但是当我读取像 ace143 这样的数据 id varchar 时出现错误

我的数据:http://prntscr.com/8xe7xc

错误:http://prntscr.com/8x5r9s

【问题讨论】:

    标签: sql-server vb.net visual-studio


    【解决方案1】:

    如果您在 SQL 中有字符串,则必须将它们包含在 's 中,因此您必须这样做:

    "...WHERE id= '" & TextBox1.Text & "'"
    

    但请不要这样做,它会使您的应用程序容易受到 SQL 注入的攻击,您应该改用参数。

    【讨论】:

      【解决方案2】:

      使用SqlParameter。您可以为 SqlParameter 定义一个类型,并正确生成 SqlValue。
      同样使用SqlParameter 将从Sql 注入中保存,正如@JamesZ 提到的那样

      con.Open()
      Dim query As String = "SELECT id, Cash FROM tbl_UserStatus WHERE id=@ID"
      Using cmd As New SqlCommand(query, con)
          'Create parameter for query
          Dim param As New SqlParameter With {.ParameterName = "@ID",
                                              .SqlDbType = SqlDbType.VarChar,
                                              .Value = TextBox1.Text}
          'Add created parameter to the command
          cmd.Parameters.Add(param)
          Using myreader As SqlDataReader = cmd.ExecuteReader()
              If myreader.HasRows Then
                  If myreader.Read() = true Then
                      TextBox2.Text = myreader.Item("id").ToString
                      TextBox3.Text = myreader.Item("Cash").ToString 
                  End If
              End If
          End Using
      End Using 'SqlCommand need to be disposed too
      con.Close()
      TextBox1.Clear()
      

      【讨论】:

      猜你喜欢
      • 2016-08-18
      • 2014-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-02
      相关资源
      最近更新 更多