2010-08-10 7 views
1

Je suis en train de mettre en œuvre SqlDependency dans mon application vb.net selon:C# VB.net conseils de conversion de syntaxe

http://www.dreamincode.net/forums/topic/156991-using-sqldependency-to-monitor-sql-database-changes/

Je vais avoir des problèmes avec le code involking, lorsqu'une notification est reçu l'application se bloque sans erreur. (Lorsque MyOnChanged est appelé via le deligate)

Est-ce que j'ai fait une erreur dans ma conversion C#> VB.net?

Private Sub GetNames() 
    Dim connectionString As String = "String..." 
    ListView1.Items.Clear() 

    SqlDependency.[Stop](connectionString) 
    SqlDependency.Start(connectionString) 

    Using cn As New SqlConnection(connectionString) 
     Using cmd As SqlCommand = cn.CreateCommand() 
      cmd.CommandType = CommandType.Text 
      cmd.CommandText = "SELECT [finish_time], [file_name] FROM dbo.[log_table];" 

      cmd.Notification = Nothing 

      Dim dep As New SqlDependency(cmd) 

      AddHandler dep.OnChange, New OnChangeEventHandler(AddressOf MyOnChanged) 

      cn.Open() 

      Using dr As SqlDataReader = cmd.ExecuteReader() 
       While dr.Read() 

        Dim ls As New ListViewItem(dr.Item("finish_time").ToString.Trim()) 
        ls.SubItems.Add(dr.Item("file_name").ToString.Trim()) 
        ListView1.Items.Add(ls) 

       End While 
      End Using 
     End Using 
    End Using 
End Sub 




Private Sub MyOnChanged(ByVal sender As Object, ByVal e As SqlNotificationEventArgs) 
    If ListView1.InvokeRequired Then 
     ListView1.Invoke(New MethodInvoker(AddressOf GetNames)) 
    Else 
     GetNames() 
    End If 
    Dim dep As SqlDependency = TryCast(sender, SqlDependency) 
    AddHandler dep.OnChange, New OnChangeEventHandler(AddressOf MyOnChanged) 
End Sub 
+0

Une astuce que vous pouvez essayer est de ce code en C#, obtenir la compilation, puis regardez le code Réflecteur .NET (recherche sur le Web pour cet outil). Cela vous permettra de prendre n'importe quel code .NET et de l'afficher dans n'importe quelle autre langue, telle que VB.Net. –

+0

En outre, apprendre à utiliser le débogueur est extrêmement utile dans un cas comme celui-ci. –

Répondre

0

Comme Merlyn recommandé, j'utiliser réflecteur .NET pour élaborer la bonne conversion .net:

Private Sub MyOnChanged(ByVal sender As Object, ByVal e As SqlNotificationEventArgs) 
    If MyBase.InvokeRequired Then 
     Me.LVFTPXfers.BeginInvoke(New MethodInvoker(AddressOf Me.GetNames)) 
    Else 
     Me.GetNames() 
    End If 
    Dim dependency As SqlDependency = TryCast(sender, SqlDependency) 
    RemoveHandler dependency.OnChange, New OnChangeEventHandler(AddressOf Me.MyOnChanged) 
End Sub