2011-02-03 6 views
2

을 사용하려면이 문자열 기반의 SQL 쿼리를 변환하는 방법에는 다음과 같은 루틴 (즉, 작동)하지만 사용하는 손으로 입력 한 문자열로 인해 업데이트 할 지저분하다 :Linq에

Private Sub ListDefaults() 
    Dim conn As New SqlConnection(_ 
    "server=bas047\AUTODESKVAULT;Database=DWGDetails;Integrated Security=SSPI") 
    'Dim conn As New SqlConnection(_ 
    '"server=bas047\AUTODESKVAULT;Database=DWGDetails;Integrated Security=SSPI") 
    Try 
     'clear columns 
     If Not Me.DataGridView1.DataSource Is Nothing Then 
      Me.DataGridView1.Columns.Clear() 
      Me.DataGridView1.DataSource = Nothing 
     End If 
     conn.Open() 
     Dim cmd As SqlCommand = conn.CreateCommand() 
     Dim DLcmd As SqlCommand = conn.CreateCommand() 
     Dim ILcmd As SqlCommand = conn.CreateCommand() 
     'Dim srctbl As String = String.Empty 
     If RadioButton1.Checked = True Then 'A3 
      shtsize = "A3" 
      cmd.CommandText = "SELECT [AttributeName],[IsDefaultValue],[DefaultValue] FROM " & _ 
       Chr(34) & "DefaultValues(Borders SB-A3_993-5.2(block))" & Chr(34) 
      srctbl = "DefaultValues(Borders SB-A3_993-5.2(block))" 
     ElseIf RadioButton2.Checked = True Then 'A2 
      shtsize = "A2" 
      cmd.CommandText = "SELECT [AttributeName],[IsDefaultValue],[DefaultValue] FROM " & _ 
       Chr(34) & "DefaultValues(Borders SB-A2_992-5.2(block))" & Chr(34) 
      srctbl = "DefaultValues(Borders SB-A2_992-5.2(block))" 
     ElseIf RadioButton3.Checked = True Then 'A1 
      shtsize = "A1" 
      cmd.CommandText = "SELECT [AttributeName],[IsDefaultValue],[DefaultValue] FROM " & _ 
       Chr(34) & "DefaultValues(Borders SB-A1_991-5.2(block))" & Chr(34) 
      srctbl = "DefaultValues(Borders SB-A1_991-5.2(block))" 
     ElseIf RadioButton4.Checked = True Then 'A0 
      shtsize = "A0" 
      cmd.CommandText = "SELECT [AttributeName],[IsDefaultValue],[DefaultValue] FROM " & _ 
       Chr(34) & "DefaultValues(Borders SB-A0_990-5.2(block))" & Chr(34) 
      srctbl = "DefaultValues(Borders SB-A0_990-5.2(block))" 
     End If 

     'Populate datagridview1 
     da = New SqlDataAdapter(cmd.CommandText, conn.ConnectionString) 
     ds = New DataSet 
     da.Fill(ds, srctbl) 

     DataGridView1.DataSource = ds.Tables(0) 
     DataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.DisplayedCells) 
     'should enable setting of the date and drawn by entries 
     'Dim X As Integer 
     'For X = 0 To DataGridView1.Rows.Count 
     ' If UCase(DataGridView1.Rows(X).Cells(0).Value) = "DRAWN BY" Then 
     '  MessageBox.Show("Found Drawn by!") 
     ' End If 
     'Next 
    Catch ex As System.Data.SqlClient.SqlException 
     MessageBox.Show("There was an error in executing the SQL." & vbLf & "Error Message:" & ex.Message, "SQL") 
    Finally 
     'cleanup and reset! 
     conn.Close() 
    End Try 
End Sub 

그리고 내가 이것은 Linq에 대한 이상적인 후보라고 생각합니다.

Private Sub ListDefaultsMk1() 
    Try 
     Using db As New DWGDetailsDataContext 
      If RadioButton1.Checked = True Then 'A3 
       shtsize = "A3" 
       DataGridView1.DataSource = 
       From c In db.DefaultValues_Borders_SB_A3_993_5_2_block__s() 
       Select New With {c.AttributeName, c.IsDefaultValue, c.DefaultValue} 
      ElseIf RadioButton2.Checked = True Then 'A2 
       shtsize = "A2" 
       DataGridView1.DataSource = 
        From c In db.DefaultValues_Borders_SB_A2_992_5_2_block__s() 
        Select New With {c.AttributeName, c.IsDefaultValue, c.DefaultValue} 
      ElseIf RadioButton3.Checked = True Then 'A1 
       shtsize = "A1" 
       DataGridView1.DataSource = 
        From c In db.DefaultValues_Borders_SB_A1_991_5_2_block__s() 
        Select New With {c.AttributeName, c.IsDefaultValue, c.DefaultValue} 
      ElseIf RadioButton4.Checked = True Then 'A0 
       shtsize = "A0" 
       DataGridView1.DataSource = 
        From c In db.DefaultValues_Borders_SB_A0_990_5_2_block__s() 
        Select New With {c.AttributeName, c.IsDefaultValue, c.DefaultValue} 
      End If 
     End Using 
    Catch ex As Exception 
     MessageBox.Show("There was an error in executing the SQL." & vbLf & "Error Message:" & ex.Message, "SQL") 
    End Try 
End Sub 

내 프로그램의 다음 단계는 필기 SQL 코드, 공유 데이터 집합 "의 경우합니다 (DataGridView에에서 (편집) 값을하는 것입니다 : 이것은 내가 지금까지 그 작동하는 것 같다 무슨이다 ds ") 다른 테이블을 채우지 만 Linq를 사용하여이를 수행하는 방법을 알 수는 없습니다.

누구든지 도움을 제공 할 수 있습니까?

미리 감사드립니다.

Alex.

편집 : 여기에 내가 코멘트

Private Sub ListDefaultsMk1() 
    Try 
     Using db As New DWGDetailsDataContext 
      If RadioButton1.Checked = True Then 'A3 
       shtsize = "A3" 
       DataGridView1.DataSource = (From c In db.DefaultValues_Borders_SB_A3_993_5_2_block__s Select c).ToList() 
      ElseIf RadioButton2.Checked = True Then 'A2 
       shtsize = "A2" 
       DataGridView1.DataSource = (From c In db.DefaultValues_Borders_SB_A2_992_5_2_block__s Select c).ToList() 
      ElseIf RadioButton3.Checked = True Then 'A1 
       shtsize = "A1" 
       DataGridView1.DataSource = (From c In db.DefaultValues_Borders_SB_A1_991_5_2_block__s Select c).ToList() 
      ElseIf RadioButton4.Checked = True Then 'A0 
       shtsize = "A0" 
       DataGridView1.DataSource = (From c In db.DefaultValues_Borders_SB_A0_990_5_2_block__s Select c).ToList() 
      End If 
     End Using 
    Catch ex As Exception 
     MessageBox.Show("There was an error in executing the Linq2SQL Query!" & vbLf & "Error Message:" & ex.Message, "SQL") 
    End Try 
End Sub 

답변

0

Linq2Sql을 기반으로 감소했고 데이터 집합은 두 개의 완전히 다른 짐승과 그리드가 소비 할 수 있기 때문에 모두가 그리드에서 사용할 수있는 이유는 무엇입니까 단순한 데이터 셋 이상의 유형

기술적으로 linq 쿼리 결과를 ToList()과 같이 고정한 다음 목록을 그리드에 바인딩 할 수 있습니다. 이후에 모든 편집 내용이 List에 반영되어 사용자는 다른 형식으로 변환 할 수 있습니다 (데이터 세트의 테이블, 데이터 세트의 테이블, 데이터 세트 여야 함) 데이터베이스 등).

+0

감사합니다. mmix, 이제는 시간을 좀 들여 보겠습니다. 그리고 지금까지는 회신을 보지 못했습니다. :( – AlexFielder