2016-04-27 107 views
0

當我點擊搜索按鈕,下面的代碼將運行。代碼中沒有錯誤,但datagridview僅顯示列名。查詢是否有錯誤?VB.NET MYSQL Datagridview爲空?

mySqlConn = New MySqlConnection 
    myCommand = New MySqlCommand 
    dt = New DataTable() 
    Try 
     If dt IsNot Nothing Then 
      dt.Dispose() 
     End If 
     If da IsNot Nothing Then 
      da.Dispose() 
     End If 
     If DataGridView1.DataSource IsNot Nothing Then 
      DataGridView1.DataSource = Nothing 
     End If 
     mySqlConn.ConnectionString = connStr 
     myCommand.CommandText = "Select * from createproject Where (FloatNumber = @floatNo OR @floatNo is Null) AND (DeveloperName = @devName OR @devName is Null) AND (DevelopmentType = @devType OR @devType is Null) AND (LotPt = @lotPt OR @lotPt is Null) AND (Mukim = @mukim OR @mukim is Null) AND (Daerah = @daerah OR @daerah is Null) AND (Negeri = @negeri OR @negeri is Null) AND (TempReference = @tempRef OR @tempRef is Null)" 
     myCommand.Connection = mySqlConn 
     mySqlConn.Open() 

     myCommand.Parameters.AddWithValue("@floatNo", TextBox3.Text.Trim()) 
     myCommand.Parameters.AddWithValue("@devName", ComboBox6.Text.Trim()) 
     myCommand.Parameters.AddWithValue("@devType", ComboBox7.Text.Trim()) 
     myCommand.Parameters.AddWithValue("@lotPt", TextBox4.Text.Trim()) 
     myCommand.Parameters.AddWithValue("@mukim", ComboBox8.Text.Trim()) 
     myCommand.Parameters.AddWithValue("@daerah", ComboBox9.Text.Trim()) 
     myCommand.Parameters.AddWithValue("@negeri", ComboBox10.Text.Trim()) 
     myCommand.Parameters.AddWithValue("@tempRef", TextBox6.Text.Trim()) 
     da = New MySqlDataAdapter(myCommand.ToString(), mySqlConn) 
     da.SelectCommand = myCommand 
     da.Fill(dt) 
     DataGridView1.DataSource = dt 
     da.Update(dt) 
    Catch ex As MySqlException 
     MsgBox(ex.ToString()) 
    Finally 
     mySqlConn.Close() 
     mySqlConn.Dispose() 

    End Try 

enter image description here

這是我點擊搜索 enter image description here

+0

推斷看看在http:// bobby- tables.com/ – William

+0

@William是關於sql注入預防的嗎?我已經做對了......? – Student

+0

大概沒有符合您的標準的記錄。我們不應該真的需要解釋這一點,但你應該改變你的查詢使用一個條件,然後兩個,等等。只要你沒有得到你所期望的,你已經找到了問題。 – jmcilhinney

回答

1

後,如果你的意圖是可以忽略的標準,如果用戶離開一個字段爲空,那麼你實際上必須在這種情況下,將NULL值傳遞給查詢。就像String.EmptyNothing在VB中不是一回事,所以SQL中的空字符串和NULL不是同一個東西。你將不得不做這樣的事情:

Dim sql = <sql> 
       SELECT * 
       FROM MyTable 
       WHERE (@Column1 IS NULL OR Column1 = @Column1) 
       AND (@Column2 IS NULL OR Column2 = @Column2) 
      </sql> 

myCommand.CommandText = sql.Value 

Dim column1 = TextBox1.Text.Trim() 
Dim column2 = TextBox2.Text.Trim() 

With myCommand.Parameters 
    .Add("@Column1", SqlDbType.VarChar).Value = If(column1 = String.Empty, CObj(DBNull.Value), column1) 
    .Add("@Column2", SqlDbType.VarChar).Value = If(column2 = String.Empty, CObj(DBNull.Value), column2) 
End With 

注意,參數是用Add而不是AddWithValue補充說,因爲數據類型不能從DBNull.Value

+0

但編譯器不斷說add被棄用。使用它很好嗎? – Student

+0

有一些重載'添加'。具有'String'和'Object'類型參數的重載已被棄用,因爲它已被'AddWithValue'取代。儘管我使用的重載參數的類型爲'String'和'SqlDbType'。該過載尚未被棄用。 – jmcilhinney

+0

我明白了。你能解釋一下SqlDbType和CObj嗎?我不太明白那些東西和用途。不能,我只是把一個if語句來檢查文本框是否爲空然後Textbox.text =「」? – Student