2011-02-08 8 views
0

1) 확인란이있는 gridview에 대해 vb.net의 기본 키가없는 테이블에 대한 업데이트 쿼리의 구문은 무엇입니까?GridView의 기본 키가없는 테이블에 대한 SQL UpdateCommand

면책 조항 : 단호하게 기본 키를 추가하는 것은 옵션이 아닙니다. 내 프로그램은 데이터 관리가 열악한 훨씬 큰 시스템의 작은 프로그램입니다. 내 개발 시간은 다른 소프트웨어를 다시 작성하는 것을 포함하지 않습니다. 여기

는 AgentLeads 데이터베이스이고 MktDtaLeads_Scrubbed이 테이블 테이블의 열은 다음과 같습니다

FROM [AgentLeads].[dbo].[MktDtaLeads_Scrubbed] - [Last Name] ,[First Name], 
    [Middle Name] ,[Suffix] ,[Address Line 1] ,[Address Line 2] ,[City] ,[ST], 
    [ZipCode] ,[Email Address] ,[Phone Nbr] ,[Toll Free Nbr] ,[InsertDate] , 
    [SentDate] ,[DoNotMail] 

내가 오류를 표시하지 않습니다 지금 가지고 있지만 때 DoNotMail 필드를 업데이트하지 않습니다 코드 "선택한 필드의 데이터베이스에서 DoNotMail 값이 변경되었습니다"라는 텍스트가 표시 되더라도 확인란을 선택합니다. 나는 뒤에 default.aspx.vb 코드에 대한

추가 :

 <asp:GridView ID="GridView2" runat="server" CellPadding="2" 
      DataSourceID="SqlDataSource1" ForeColor="#333333" GridLines="None" 
      AutoGenerateColumns="False"> 
      <Columns> 
       <asp:BoundField DataField="Last Name" HeaderText="Last Name" 
        SortExpression="Last Name" /> 
       <asp:BoundField DataField="First Name" HeaderText="First Name" 
        SortExpression="First Name" /> 
       <asp:BoundField DataField="Address Line 1" HeaderText="Addr 1" 
        SortExpression="Address Line 1" /> 
       <asp:BoundField DataField="Address Line 2" HeaderText="Addr 2" 
        SortExpression="Address Line 2" /> 
       <asp:BoundField DataField="City" HeaderText="City" SortExpression="City" /> 
       <asp:BoundField DataField="ST" HeaderText="ST" SortExpression="ST" /> 
       <asp:BoundField DataField="ZipCode" HeaderText="ZipCode" 
        SortExpression="ZipCode" /> 
       <asp:BoundField DataField="Email Address" HeaderText="Email Addr" 
        SortExpression="Email Address" /> 
       <asp:BoundField DataField="Phone Nbr" HeaderText="Phone Nbr" 
        SortExpression="Phone Nbr" /> 

     <asp:TemplateField HeaderText="DoNotMail" SortExpression="DoNotMail">  
     <ItemTemplate>   
     <asp:CheckBox ID="CheckBox1" runat="server" AutoPostBack="true" CommandName="UpdateDoNotMail" Checked='<%# Bind("DoNotMail") %>' 
         Enabled="true" />  
     </ItemTemplate>  

     <EditItemTemplate>   
     <asp:CheckBox ID="CheckBox1" runat="server" AutoPostBack="true" CommandName="UpdateDoNotMail" Checked='<%# Bind("DoNotMail") %>' />  
     </EditItemTemplate>  
     </asp:TemplateField> 

      </Columns> 

2)이 두 가지를 할 수있다 : 여기

Public Sub gridview1_RowCommand(ByVal sender As Object, ByVal e As GridViewCommandEventArgs) 


    If e.CommandName = "UpdateDoNotMail" Then 

     With Me.SqlDataSource1 
      Dim box As CheckBox = DirectCast(sender, CheckBox) 


      If box.Checked = True Then 

       donotmail.SelectedValue = 1 


       .ConnectionString = ConfigurationManager.AppSettings("AgentLeadsConnectionString").ToString 

       .UpdateCommand = "UPDATE MktDataLeads_scrubbed set [email protected] 
       WHERE [last name][email protected] AND [first name][email protected] AND [Address Line 1][email protected] Line 1.selectedrow" 

      Else 
       donotmail.SelectedValue = 0 


       .ConnectionString = ConfigurationManager.AppSettings("AgentLeadsConnectionString").ToString 


       .UpdateCommand = "UPDATE MktDataLeads_scrubbed set [email protected] 
       WHERE [last name][email protected] AND [first name][email protected] AND [Address Line 1][email protected] Line 1.selectedrow" 

      End If 
     End With 

    End If 
End Sub 

가의 default.aspx에서의 GridView에 대한 코드입니다 사용자가 버튼을 눌렀을 때 전체 gridview에서 양방향 동기화를 사용하여 행이 변경 될 때마다 업데이트하지 않아도됩니까? 사용자가 상자를 체크 한 다음 다른 상자를 체크 한 다음 상자를 체크하지 않으면 많은 업데이트가 될 수 있기 때문에 ...

답변

0

여기의 default.aspx에서의 GridView에 대한 코드입니다 :

내가이 페이지에 설명 된 코드의 변형을 사용하고 작동 할 수있어! 나는 뒤에 default.aspx.vb 코드에 대한 vb.net SQL query works in SQL server but not when called from checkbox

추가 :

Public Sub checkbox_CheckedChanged(ByVal sender As Object, ByVal e As EventArgs) 'Handles checkbox.CheckedChanged 
    Dim connectionString As String = ConfigurationManager.ConnectionStrings("AgentLeadsConnectionString").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 lastname As String = [last name].Rows(dgRow.DataItemIndex).Cells(0).Text 
    Dim firstname As String = [first name].Rows(dgRow.DataItemIndex).Cells(0).Text 
    Dim address As String = [Address Line1].Rows(dgRow.DataItemIndex).Cells(0).Text 

    Dim insertSQL As String 

    If box.Checked = True Then 
     insertSQL = "UPDATE MktDataLeads_scrubbed " 
     insertSQL &= "SET donotmail=1 " 
     insertSQL &= "WHERE [last name]= @lastname AND [first name][email protected] AND [Address Line1][email protected] " 
    Else 
     insertSQL = "UPDATE MktDataLeads_scrubbed " 
     insertSQL &= "SET donotmail=0 " 
     insertSQL &= "WHERE [last name]= @lastname AND [first name][email protected] AND [Address Line1][email protected] " 
    End If 

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

End Sub 

을 내가 동일한 코드 사용의 gridview의 경우 :

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

이것은 동일한 레코드를 구별 할 수 없으므로 까다로운 상황입니다 고유 기본 키가 없습니다.

그러나 할 수있는 일은 GridView's OldValues property을 사용하는 것입니다. 개발자가 GridView를 처리하는 방법은 아니지만 여기에 구세주가 될지도 모릅니다.

예를 들어 업데이트 할 행을 파악하려면 모든 속성의 모든 OldValues에 where 절을 설정하고 이에 따라 업데이트하십시오. 귀하의 끈적한 상황 때문에, 당신은 단지 하나 이상의 행을 업데이 트 결국 수 있습니다 -하지만 그것은 기본 키에 대해 지불하는 가격입니다.

+0

올바른 구문 무엇을 for- .UpdateCommand = "UPDATE MktDataLeads_scrubbed 설정 donotmail = @ donotmail 어디 GridViewRow 행 = GridView1.SelectedRow AND [성] = @ lastname.selectedrow AND [이름] = @ firstname.selectedrow AND [주소 라인 1] = @ 주소 라인 1.selectedrow " –

+0

어때? 어떻게 든이 코드를 적용 - http://stackoverflow.co m/questions/4239394/vb-net-sql-query-in-sql-server-but-from-from-checkbox? –

관련 문제