2015-12-04 63 views
-1

解决方案:我注意到我传递的变量的长度,用户名超过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 
+2

定义 “不工作”。你的第一个例子是一个完全没有意义的查询,因为你正在获取一个你已经拥有*的值。你的第二个例子是一个明显的SQL注入漏洞,不应该被使用。你的第三个例子根本不使用输入值,只是使用硬编码的值。你想要做什么,失败的方式是什么? – David

+1

它不起作用,因为要执行的最终字符串是不同的或不合适的,如果将其保存为字符串并通过调试进行检查,很容易看出 – Drew

+0

第一个示例可用于验证名称是否存在。但是,我真的在拉另一列。如果这不起作用,我默认了一些我知道工作的东西。当它工作时,我变得非常沮丧。显然第二个例子是开放的SQL注入。例子二和三是测试。我开始使用参数,因为这是您编写它的唯一方法。 – user287848

回答

1

你说

这无论是简化版,工作。

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) 

所以这个怎么样

Dim sSql1 As String 
Dim sSql2 As String 

sSql1 = "SELECT uid FROM user WHERE username='" & Username & "'" 
sSql2 = "SELECT uid FROM user WHERE username='user'" 

而且做sSql1和sSql2快速监视和比较它们

+0

根据要求更新。 – user287848

+0

第一套,唯一的不同是尺寸。在这个集合中,所有的值都是相同的。至少,根据Excel(如果值重复,则应用填充)。 – user287848

+1

其中是sSql1和sSql2上的quickwatch。我没有看到它,我就走另一个问题 – Drew