从SQL Server读取数据只能是Integer

时间:2015-10-31 11:32:32

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

我有从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()

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

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

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

2 个答案:

答案 0 :(得分:0)

如果你在SQL中有字符串,你必须将它们括在'中,所以你必须这样做:

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

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

答案 1 :(得分:0)

使用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()