我有从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有错误
答案 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()