2010-11-21 9 views
1

denildiğinde, checkbox_CheckedChanged adlı bir rutini çağıran onay kutularıyla bir datagrid var. Çok uzak çok iyi. Veri görünümünde başka bir sütunun değerini hesaplamayı başardım. Bu, uğraştığım satırın kimliğini belirlememi sağlıyor.vb.net SQL sorgusu SQL serverde çalışıyor ancak checkbox

Onay kutularının başlangıç ​​değerini tanımlayan sütun değerini değiştirmeye çalışıyorum, ancak yazdığım SQL, vb.net tarafından çağrıldığında işe yaramıyor - girildiğinde çalışıyor Ancak, SQL sunucuya elle.

İşte arkasında benim kod:

Public Sub checkbox_CheckedChanged(ByVal sender As Object, ByVal e As EventArgs) 'Handles checkbox.CheckedChanged 
    Dim connectionString As String = WebConfigurationManager.ConnectionStrings("edinsec").ConnectionString 


    Dim box As CheckBox = DirectCast(sender, CheckBox) 
    Dim tblcell As TableCell = CType(box.Parent, TableCell) 
    Dim dgRow As GridViewRow = CType(tblcell.Parent, GridViewRow) 

    Dim msgId As Integer = unreadMessages.Rows(dgRow.DataItemIndex).Cells(0).Text 

    Dim insertSQL As String 

    If box.Checked = True Then 
    insertSQL = "UPDATE messages" 
    insertSQL &= "SET readit = 0" 
    insertSQL &= "WHERE msgid = @msgId" 
    Else 
    insertSQL = "UPDATE messages" 
    insertSQL &= "SET readit = 1" 
    insertSQL &= "WHERE msgid = @msgId" 
    End If 

    Using con As New SqlConnection(connectionString) 
    Dim cmd As New SqlCommand(insertSQL, con) 
    cmd.Parameters.AddWithValue("@msgId", msgId) 
    Try 
     con.Open() 
     cmd.ExecuteNonQuery() 
    Catch Err As SqlException 
     MsgBox("Error", 65584, "Insertion Error") 
    End Try 
    con.Close() 
    End Using 

End Sub 

fikri tıklandığında, onay kutusu, karşıtı olan veritabanında 'ReaDit' değerini çevirmek olacaktır. Ancak SqlException'a atlama yapmaya devam ediyor, bu yüzden hata mesajını görüyorum. Herhangi bir yardım çok takdir

  <asp:TemplateField HeaderText="readit" SortExpression="readit"> 
    <ItemTemplate> 
     <asp:CheckBox ID="CheckBox1" runat="server" AutoPostBack="true" OnCheckedChanged="checkbox_CheckedChanged" Checked='<%# Bind("readit") %>' 
      Enabled="true" /> 
    </ItemTemplate> 
    <EditItemTemplate> 
     <asp:CheckBox ID="CheckBox1" runat="server" AutoPostBack="true" OnCheckedChanged="checkbox_CheckedChanged" Checked='<%# Bind("readit") %>' /> 
    </EditItemTemplate> 
     </asp:TemplateField> 

:

işaret kutusu aspx kod budur. Visual Studio (2008) bu durumda SQL hatalarında sıfır sıfır geri bildirim veriyor, bu da oldukça aldatıcı.

cevap

1

Sen güncelleme açıklamada bazı boşluk eklemek gerekir: Ben messages sonra ve readit = 0/1 sonra boşluk eklemiş

If box.Checked = True Then 
     insertSQL = "UPDATE messages " 
     insertSQL &= "SET readit = 0 " 
     insertSQL &= "WHERE msgid = @msgId" 
    Else 
     insertSQL = "UPDATE messages " 
     insertSQL &= "SET readit = 1 " 
     insertSQL &= "WHERE msgid = @msgId" 
    End If 

Bildirimi. Aksi halde ifadeniz SSMS'de de çalışmayan UPDATE messagesSET ... olacaktır.

+0

Klaus - çok teşekkürler, SQL'in çalışmasını sağlamak için çalıştı. Sorun şu ki, 'sopa' değiştirmek için iki kez onay kutularına tıklamak zorundayım ... DÜZENLEME: Ben sadece yanlış bir şekilde mantığı vardı ... noob hatası :) – melat0nin