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



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

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

我用了泰勒里克:http://converter.telerik.com/

并得到了这些结果(如下所示(。我想知道熟悉 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

以下是我在使用 Telerik 的在线转换器时在 C# 中得到的内容:

SqlDataReader r = sqlCommand.ExecuteReader();
while (true)
{
if (r.Read())
{
SQL2 = "SELECT * from Invoices ";
SQL2 = SQL2 + " WHERE Num = '" + r("Num") + "'";

/* 无法转换 AssignmentStatementSyntax, 转换错误: 未实现 XmlElement 的转换,请在 '(
sql..."在字符 314

at ICSharpCode.CodeConverter.CSharp.VisualBasicConverter.NodesVisitor.DefaultVisit(SyntaxNode node(at Microsoft.CodeAnalysis.VisualBasic.VisualBasicSyntaxVisitor1.VisitXmlElement(XmlElementSyntax node)
at Microsoft.CodeAnalysis.VisualBasic.Syntax.XmlElementSyntax.Accept[TResult](VisualBasicSyntaxVisitor
1 visitor(at Microsoft.CodeAnalysis.VisualBasic.VisualBasicSyntaxVisitor1.Visit(SyntaxNode node)
at ICSharpCode.CodeConverter.CSharp.CommentConvertingNodesVisitor.DefaultVisit(SyntaxNode node)
at Microsoft.CodeAnalysis.VisualBasic.VisualBasicSyntaxVisitor

1.VisitXmlElement(XmlElementSyntax

node(
at Microsoft.CodeAnalysis.VisualBasic.Syntax.XmlElementSyntax.Accept[TResult](VisualBasicSyntaxVisitor1 visitor)
at ICSharpCode.CodeConverter.CSharp.VisualBasicConverter.NodesVisitor.VisitSimpleArgument(SimpleArgumentSyntax node)
at Microsoft.CodeAnalysis.VisualBasic.Syntax.SimpleArgumentSyntax.Accept[TResult](VisualBasicSyntaxVisitor
1 visitor(
at Microsoft.CodeAnalysis.VisualBasic.VisualBasicSyntaxVisitor1.Visit(SyntaxNode node)
at ICSharpCode.CodeConverter.CSharp.CommentConvertingNodesVisitor.DefaultVisit(SyntaxNode node) at Microsoft.CodeAnalysis.VisualBasic.VisualBasicSyntaxVisitor
1.VisitSimpleArgument(SimpleArgumentSyntax node( at Microsoft.CodeAnalysis.VisualBasic.Syntax.SimpleArgumentSyntax.Accept[TResult](VisualBasicSyntaxVisitor1 visitor) at ICSharpCode.CodeConverter.CSharp.VisualBasicConverter.NodesVisitor.<>c__DisplayClass83_0.<ConvertArguments>b__0(ArgumentSyntax a, Int32 i) at System.Linq.Enumerable.<SelectIterator>d__52.MoveNext(( at System.Linq.Enumerable.WhereEnumerableIterator1.MoveNext() at Microsoft.CodeAnalysis.CSharp.SyntaxFactory.SeparatedList[TNode](IEnumerable1 个节点( at ICSharpCode.CodeConverter.CSharp.VisualBasicConverter.NodesVisitor.VisitArgumentList(ArgumentListSyntax node( at Microsoft.CodeAnalysis.VisualBasic.Syntax.ArgumentListSyntax.Accept[TResult](VisualBasicSyntaxVisitor1 visitor) at Microsoft.CodeAnalysis.VisualBasic.VisualBasicSyntaxVisitor1.Visit(SyntaxNode node( at ICSharpCode.CodeConverter.CSharp.CommentConvertingNodesVisitor.DefaultVisit(SyntaxNode node( at Microsoft.CodeAnalysis.VisualBasic.VisualBasicSyntaxVisitor1.VisitArgumentList(ArgumentListSyntax node) at Microsoft.CodeAnalysis.VisualBasic.Syntax.ArgumentListSyntax.Accept[TResult](VisualBasicSyntaxVisitor1 visitor( at ICSharpCode.CodeConverter.CSharp.VisualBasicConverter.NodesVisitor.VisitObjectCreationExpression(ObjectCreationExpressionSyntax node( at Microsoft.CodeAnalysis.VisualBasic.Syntax.ObjectCreationExpressionSyntax.Accept[TResult](VisualBasicSyntaxVisitor1 visitor) at Microsoft.CodeAnalysis.VisualBasic.VisualBasicSyntaxVisitor1.Visit(SyntaxNode node( at ICSharpCode.CodeConverter.CSharp.CommentConvertingNodesVisitor.DefaultVisit(SyntaxNode node( at Microsoft.CodeAnalysis.VisualBasic.VisualBasicSyntaxVisitor1.VisitObjectCreationExpression(ObjectCreationExpressionSyntax node) at Microsoft.CodeAnalysis.VisualBasic.Syntax.ObjectCreationExpressionSyntax.Accept[TResult](VisualBasicSyntaxVisitor1 visitor( at ICSharpCode.CodeConverter.CSharp.VisualBasicConverter.MethodBodyVisitor.VisitAssignmentStatement(AssignmentStatementSyntax node( at Microsoft.CodeAnalysis.VisualBasic.Syntax.AssignmentStatementSyntax.Accept[TResult](VisualBasicSyntaxVisitor1 visitor) at Microsoft.CodeAnalysis.VisualBasic.VisualBasicSyntaxVisitor1.Visit(SyntaxNode node( at ICSharpCode.CodeConverter.CSharp.CommentConvertingMethodBodyVisitor.ConvertWithTrivia(SyntaxNode node( at ICSharpCode.CodeConverter.CSharp.CommentConvertingMethodBodyVisitor.DefaultVisit(SyntaxNode node(

我最终正在尝试扩展具有以下命令文本的不同查询;我需要扩展它的原因是能够计算与 Num 关联的行总数(返回的行数,例如,如果超过 1(:

dbConnection.Open();
var sqlCmd = dbConnection.CreateCommand();
sqlCmd.CommandText = @"SELECT [ItemID], [Num]
FROM [Test].[dbo].[Invoices]
WHERE Num = '" + orderNumber.ToString() + "'";

好的,关于转换的第一部分,首先,您没有复制 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# :

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
}

再次注意:

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

在 VB.Net:

  • VB.Net 代码需要重写。

  • 考虑使用 [使用 ...结束使用]方法与数据库连接。

最新更新