将SQL命令从vb.net转换为C#

将SQL命令从vb.net转换为C#,c#,sql,vb.net,vb.net-to-c#,C#,Sql,Vb.net,Vb.net To C#,我正在尝试分析vb.net中的SQL命令文本,并将其与C#兼容 我在将SQL命令文本从vb.net转换为c#时遇到问题 我用了Telerik: 并得到了这些结果(如下所示)。我想知道熟悉VB.NET和C#的人能否帮我重新编写完整的SQL命令文本 原始vb.net命令文本: Dim r As SqlDataReader = sqlCommand.ExecuteReader() Do While True If r.Read() Then SQL2 = "SELECT *

我正在尝试分析vb.net中的SQL命令文本,并将其与C#兼容

我在将SQL命令文本从vb.net转换为c#时遇到问题

我用了Telerik:

并得到了这些结果(如下所示)。我想知道熟悉VB.NET和C#的人能否帮我重新编写完整的SQL命令文本

原始vb.net命令文本:

Dim r As SqlDataReader = sqlCommand.ExecuteReader()

Do While True
    If r.Read() Then
         SQL2 = "SELECT * from Invoices "
         SQL2 = SQL2 & " WHERE Num = '" & r("Num") & "'"

         conPubs2 = New SqlConnection(<ConnectionString>)
         sqlCommand2 = New SqlCommand(SQL2, conPubs2)
         conPubs2.Open()

         Dim r2 As SqlDataReader = sqlCommand2.ExecuteReader()

         Do While True
             If r2.Read() Then
                 MsgBox(RTrim(r("Num")) & ": " & RTrim(r2("ItemID")))
             Else
                 Exit Do
             End If
         Loop

    Else
        Exit Do
    End If
Loop

conPubs.Close()
conPubs2.Close()

End Sub
/*无法转换AssignmentStatementSyntax,转换错误:未实现XmlElement的转换,请在“')
字符314处的“sql…”

在ICSharpCode.CodeConverter.CSharp.VisualBasicConverter.NodesVisitor.DefaultVisite(SyntaxNode节点)
在Microsoft.CodeAnalysis.VisualBasic.VisualBasicSyntaxVisitor
1.VisitXmlElement(XmlElementSyntax节点)
在Microsoft.CodeAnalysis.VisualBasic.Syntax.XmlElementSyntax.Accept[TResult](VisualBasic SyntaxVisitor
1 visitor)
在Microsoft.CodeAnalysis.VisualBasic.VisualBasic SyntaxVisitor
1.访问(SyntaxNode节点)
在ICSharpCode.CodeConverter.CSharp.CommentConvertingNodesVisitor.DefaultVisite(SyntaxNode节点)
在Microsoft.CodeAnalysis.VisualBasic.VisualBasicSyntaxVisitor上
1.VisitXmlElement(XmlElementSyntax节点)
在Microsoft.CodeAnalysis.VisualBasic.Syntax.XmlElementSyntax.Accept[TResult](VisualBasicSyntaxVisitor
1 visitor)
在ICSharpCode.CodeConverter.CSharp.VisualBasicConverter.NodesVisitor.VisitSimpleArgument(SimpleArgumentSyntax节点)
在Microsoft.CodeAnalysis.VisualBasic.Syntax.SimpleArgumentSyntax.Accept[TResult](VisualBasicSyntaxVisitor
1访问者)
在Microsoft.CodeAnalysis.VisualBasic.VisualBasic SyntaxVisitor
1.访问(SyntaxNode节点)
在ICSharpCode.CodeConverter.CSharp.CommentConvertingNodesVisitor.DefaultVisite(SyntaxNode节点) 在Microsoft.CodeAnalysis.VisualBasic.VisualBasicSyntaxVisitor上
1.VisitSimpleArgument(SimpleArgumentSyntax节点) 在Microsoft.CodeAnalysis.VisualBasic.Syntax.SimpleArgumentSyntax.Accept[TResult](VisualBasicSyntaxVisitor
1访问者)
在ICSharpCode.CodeConverter.CSharp.VisualBasicConverter.NodesVisitor.c__显示类83_0.b__0(参数语法a,Int32 i)
在System.Linq.Enumerable.d_u5中
2.MoveNext() 在System.Linq.Enumerable.WhereEnumerableInterator
1.MoveNext()中
在Microsoft.CodeAnalysis.CSharp.SyntaxFactory.SeparatedList[TNode](IEnumerable
1节点)上 在ICSharpCode.CodeConverter.CSharp.VisualBasicConverter.NodesVisitor.VisiTargetUMENTList(ArgumentListSyntax节点) 在Microsoft.CodeAnalysis.VisualBasic.Syntax.ArgumentListSyntax.Accept[TResult](VisualBasicSyntaxVisitor
1访问者)
在Microsoft.CodeAnalysis.VisualBasic.VisualBasic SyntaxVisitor上
1.访问(SyntaxNode) 在ICSharpCode.CodeConverter.CSharp.CommentConvertingNodesVisitor.DefaultVisite(SyntaxNode节点) 在Microsoft.CodeAnalysis.VisualBasic.VisualBasicSyntaxVisitor
1.VisuTargetList(ArgumentListSyntax节点)
在Microsoft.CodeAnalysis.VisualBasic.Syntax.ArgumentListSyntax.Accept[TResult](VisualBasicSyntaxVisitor
1访问者) 在ICSharpCode.CodeConverter.CSharp.VisualBasicConverter.NodesVisitor.VisitoObjectCreationExpression(ObjectCreationExpressionSyntax节点) 在Microsoft.CodeAnalysis.VisualBasic.Syntax.ObjectCreationExpressionSyntax.Accept[TResult](VisualBasicSyntaxVisitor
1访问者)
在Microsoft.CodeAnalysis.VisualBasic.VisualBasic SyntaxVisitor上
1.访问(SyntaxNode) 在ICSharpCode.CodeConverter.CSharp.CommentConvertingNodesVisitor.DefaultVisite(SyntaxNode节点) 在Microsoft.CodeAnalysis.VisualBasic.VisualBasicSyntaxVisitor
1.VisitoObjectCreationExpression(ObjectCreationExpressionSyntax节点)
在Microsoft.CodeAnalysis.VisualBasic.Syntax.ObjectCreationExpressionSyntax.Accept[TResult](VisualBasicSyntaxVisitor
1访问者) 在ICSharpCode.CodeConverter.CSharp.VisualBasicConverter.MethodBodyVisitor.VisitAsignmentStatement(AssignmentStatementSyntax节点)上 在Microsoft.CodeAnalysis.VisualBasic.Syntax.AssignmentStatementSyntax.Accept[TResult](VisualBasicSyntaxVisitor
1访问者)
在Microsoft.CodeAnalysis.VisualBasic.VisualBasic SyntaxVisitor上
1.访问(SyntaxNode) 在ICSharpCode.CodeConverter.CSharp.CommentConvertingMethodBodyVisitor.ConvertWithTrivia(SyntaxNode节点) 在ICSharpCode.CodeConverter.CSharp.CommentConvertingMethodBodyVisitor.DefaultVisite(SyntaxNode节点)

最后,我尝试展开一个不同的查询,该查询包含以下命令文本:;我需要扩展它的原因是能够计算与Num相关联的行的总数(返回的行,例如,如果超过1):


好的,关于转换的第一部分,首先,你没有复制VB.Net的全部代码,它缺少很多部分。为了正确地转换成C代码,我做了一些实现,并在你使用的同一个网站上进行了转换。 对于VB.Net[应该是这样的],这并不意味着它是以正确的方式编写的,或者不会产生错误

Sub Hello()
        Dim conPubs As SqlClient.SqlConnection = New SqlClient.SqlConnection With {.ConnectionString = "Your_ConnectionString"}
        conPubs.Open()
        Dim ThisCommand1 As New SqlClient.SqlCommand 'This line was missing from the example you copied this from.
        Dim r As SqlClient.SqlDataReader = ThisCommand1.ExecuteReader
        Do While True
            If r.Read() Then
                Dim SQL2 As String = "SELECT * from Invoices WHERE Num = '" & r("Num") & "'"
                Dim conPubs2 = New SqlClient.SqlConnection("")
                Dim sqlCommand2 = New SqlClient.SqlCommand(SQL2, conPubs2)
                conPubs2.Open()
                Dim r2 As SqlClient.SqlDataReader = sqlCommand2.ExecuteReader()
                Do While True
                    If r2.Read() Then
                        MsgBox(RTrim(r("Num")) & ": " & RTrim(r2("ItemID")))
                    Else
                        Exit Do
                    End If
                Loop
                conPubs2.Close()       'Is a second SqlServer Connection
            Else
                Exit Do
            End If
        Loop
        conPubs.Close()      'Is SqlServer Connection
    End Sub
转换为C#:

请再次注意:

这回答了您的转换问题,但并不意味着VB.Net 代码不会生成错误

在VB.Net中:

  • 需要重新编写VB.Net代码

  • 考虑对数据库连接使用[using…End using]方法


New SqlConnection()
对于VB.NET甚至都不是有效的语法,因此请修复(传递“”就足够了),然后重试转换。然而,这是一个非常糟糕的VB.NET代码,因此在转换过程中会得到同样糟糕的C代码。你最好弄清楚代码的最终目标,然后从头开始重写C代码。它看起来像是一个占位符,在代码中被替换为
dbConnection.Open();
var sqlCmd = dbConnection.CreateCommand();
sqlCmd.CommandText = @"SELECT [ItemID], [Num]
                       FROM [Test].[dbo].[Invoices]
                       WHERE Num = '" + orderNumber.ToString() + "'";
Sub Hello()
        Dim conPubs As SqlClient.SqlConnection = New SqlClient.SqlConnection With {.ConnectionString = "Your_ConnectionString"}
        conPubs.Open()
        Dim ThisCommand1 As New SqlClient.SqlCommand 'This line was missing from the example you copied this from.
        Dim r As SqlClient.SqlDataReader = ThisCommand1.ExecuteReader
        Do While True
            If r.Read() Then
                Dim SQL2 As String = "SELECT * from Invoices WHERE Num = '" & r("Num") & "'"
                Dim conPubs2 = New SqlClient.SqlConnection("")
                Dim sqlCommand2 = New SqlClient.SqlCommand(SQL2, conPubs2)
                conPubs2.Open()
                Dim r2 As SqlClient.SqlDataReader = sqlCommand2.ExecuteReader()
                Do While True
                    If r2.Read() Then
                        MsgBox(RTrim(r("Num")) & ": " & RTrim(r2("ItemID")))
                    Else
                        Exit Do
                    End If
                Loop
                conPubs2.Close()       'Is a second SqlServer Connection
            Else
                Exit Do
            End If
        Loop
        conPubs.Close()      'Is SqlServer Connection
    End Sub
public void Hello()
{
    SqlClient.SqlConnection conPubs = new SqlClient.SqlConnection() { ConnectionString = "Your_ConnectionString" };
    conPubs.Open();
    SqlClient.SqlCommand ThisCommand1 = new SqlClient.SqlCommand(); // This line was missing from the example you copied this from.
    SqlClient.SqlDataReader r = ThisCommand1.ExecuteReader;
    while (true)
    {
        if (r.Read())
        {
            string SQL2 = "SELECT * from Invoices WHERE Num = '" + r("Num") + "'";
            var conPubs2 = new SqlClient.SqlConnection("");
            var sqlCommand2 = new SqlClient.SqlCommand(SQL2, conPubs2);
            conPubs2.Open();
            SqlClient.SqlDataReader r2 = sqlCommand2.ExecuteReader();
            while (true)
            {
                if (r2.Read())
                    MsgBox(RTrim(r("Num")) + ": " + RTrim(r2("ItemID")));
                else
                    break;
            }
            conPubs2.Close();       // Is a second SqlServer Connection
        }
        else
            break;
    }
    conPubs.Close();      // Is SqlServer Connection
}