解决方案:我注意到我传递的变量的长度,用户名超过65k。这导致我看到我设置ReceiveBufferSize错误。如果我需要检查一个唯一值,这个值才会变得明显,并且该值是流中的最后一个值。在我的“工作”命令中,用户名是第二个命令。如果您遇到类似情况,请使用QuickWatch并付出非常密切的关注。可能是导致这些值不匹配的空白。这条SQL命令有什么问题?
Public Function Before_Logon(ByVal Username As String) As String
Try
mySqlCon.Open()
Dim sqlCommandPreLogon As MySqlCommand = New MySqlCommand("SELECT username FROM user WHERE [email protected]", mySqlCon)
sqlCommandPreLogon.Parameters.AddWithValue("@username", Username)
Dim dr As MySqlDataReader = sqlCommandPreLogon.ExecuteReader()
While dr.Read
Return dr.Item(0).ToString
End While
Catch ex As Exception
End Try
Return 6
End Function
我有一个像这样的命令在另一个函数,它工作正常。这一个没有找到任何东西。删除Try/Catch显示没有错误。
这也不管用。
Dim sqlCommandPreLogon As MySqlCommand = New MySqlCommand("SELECT uid FROM user WHERE username='" & Username & "'", mySqlCon)
这确实有效,很奇怪。
Dim sqlCommandPreLogon As MySqlCommand = New MySqlCommand("SELECT uid FROM user WHERE username='user'", mySqlCon)
为什么变量/ sql参数值不能正常工作,但是这样做?
更新:当我通过QuickWatch查看参数时没有任何错误。首先是工作命令,其次是不是。
test {@uname} MySql.Data.MySqlClient.MySqlParameter
BaseName uname String
Collection {MySql.Data.MySqlClient.MySqlParameterCollection} MySql.Data.MySqlClient.MySqlParameterCollection
DbType String {16} System.Data.DbType
Direction Input {1} System.Data.ParameterDirection
Encoding Nothing System.Text.Encoding
IsNullable FALSE Boolean
MySqlDbType VarChar {253} MySql.Data.MySqlClient.MySqlDbType
ParameterName @uname String
PossibleValues Nothing System.Collections.IList
Precision 0 Byte
Precision (DbParameter) 0 Byte
Scale 0 Byte
Scale (DbParameter) 0 Byte
Size 65533 Integer
SourceColumn Nothing String
SourceColumnNullMapping FALSE Boolean
SourceVersion Current {512} System.Data.DataRowVersion
TypeHasBeenSet TRUE Boolean
Value new {String} Object
String new String
ValueObject {MySql.Data.Types.MySqlString} MySql.Data.Types.IMySqlValue
MySql.Data.Types.MySqlString {MySql.Data.Types.MySqlString} MySql.Data.Types.MySqlString
IsNull TRUE Boolean
Value String
test {@uname} MySql.Data.MySqlClient.MySqlParameter
BaseName uname String
Collection {MySql.Data.MySqlClient.MySqlParameterCollection} MySql.Data.MySqlClient.MySqlParameterCollection
DbType String {16} System.Data.DbType
Direction Input {1} System.Data.ParameterDirection
Encoding Nothing System.Text.Encoding
IsNullable FALSE Boolean
MySqlDbType VarChar {253} MySql.Data.MySqlClient.MySqlDbType
ParameterName @uname String
PossibleValues Nothing System.Collections.IList
Precision 0 Byte
Precision (DbParameter) 0 Byte
Scale 0 Byte
Scale (DbParameter) 0 Byte
Size 3 Integer
SourceColumn Nothing String
SourceColumnNullMapping FALSE Boolean
SourceVersion Current {512} System.Data.DataRowVersion
TypeHasBeenSet TRUE Boolean
Value new {String} Object
String new String
ValueObject {MySql.Data.Types.MySqlString} MySql.Data.Types.IMySqlValue
MySql.Data.Types.MySqlString {MySql.Data.Types.MySqlString} MySql.Data.Types.MySqlString
IsNull TRUE Boolean
Value String
这里是为了'user'
和' & Username & '
之间的差异。
test {@uname} MySql.Data.MySqlClient.MySqlParameter
BaseName uname String
Collection {MySql.Data.MySqlClient.MySqlParameterCollection} MySql.Data.MySqlClient.MySqlParameterCollection
DbType String {16} System.Data.DbType
Direction Input {1} System.Data.ParameterDirection
Encoding Nothing System.Text.Encoding
IsNullable FALSE Boolean
MySqlDbType VarChar {253} MySql.Data.MySqlClient.MySqlDbType
ParameterName @uname String
PossibleValues Nothing System.Collections.IList
Precision 0 Byte
Precision (DbParameter) 0 Byte
Scale 0 Byte
Scale (DbParameter) 0 Byte
Size 65533 Integer
SourceColumn Nothing String
SourceColumnNullMapping FALSE Boolean
SourceVersion Current {512} System.Data.DataRowVersion
TypeHasBeenSet TRUE Boolean
Value user {String} Object
String user String
ValueObject {MySql.Data.Types.MySqlString} MySql.Data.Types.IMySqlValue
MySql.Data.Types.MySqlString {MySql.Data.Types.MySqlString} MySql.Data.Types.MySqlString
IsNull TRUE Boolean
Value String
test {@uname} MySql.Data.MySqlClient.MySqlParameter
BaseName uname String
Collection {MySql.Data.MySqlClient.MySqlParameterCollection} MySql.Data.MySqlClient.MySqlParameterCollection
DbType String {16} System.Data.DbType
Direction Input {1} System.Data.ParameterDirection
Encoding Nothing System.Text.Encoding
IsNullable FALSE Boolean
MySqlDbType VarChar {253} MySql.Data.MySqlClient.MySqlDbType
ParameterName @uname String
PossibleValues Nothing System.Collections.IList
Precision 0 Byte
Precision (DbParameter) 0 Byte
Scale 0 Byte
Scale (DbParameter) 0 Byte
Size 65533 Integer
SourceColumn Nothing String
SourceColumnNullMapping FALSE Boolean
SourceVersion Current {512} System.Data.DataRowVersion
TypeHasBeenSet TRUE Boolean
Value user {String} Object
String user String
ValueObject {MySql.Data.Types.MySqlString} MySql.Data.Types.IMySqlValue
MySql.Data.Types.MySqlString {MySql.Data.Types.MySqlString} MySql.Data.Types.MySqlString
IsNull TRUE Boolean
Value String
定义 “不工作”。你的第一个例子是一个完全没有意义的查询,因为你正在获取一个你已经拥有*的值。你的第二个例子是一个明显的SQL注入漏洞,不应该被使用。你的第三个例子根本不使用输入值,只是使用硬编码的值。你想要做什么,失败的方式是什么? – David
它不起作用,因为要执行的最终字符串是不同的或不合适的,如果将其保存为字符串并通过调试进行检查,很容易看出 – Drew
第一个示例可用于验证名称是否存在。但是,我真的在拉另一列。如果这不起作用,我默认了一些我知道工作的东西。当它工作时,我变得非常沮丧。显然第二个例子是开放的SQL注入。例子二和三是测试。我开始使用参数,因为这是您编写它的唯一方法。 – user287848