将SQL命令从vb.net转换为C#
我正在尝试分析vb.net中的SQL命令文本,并将其与C#兼容 我在将SQL命令文本从vb.net转换为c#时遇到问题 我用了Telerik: 并得到了这些结果(如下所示)。我想知道熟悉VB.NET和C#的人能否帮我重新编写完整的SQL命令文本 原始vb.net命令文本:将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 *
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](VisualBasicSyntaxVisitor1访问者)
在ICSharpCode.CodeConverter.CSharp.VisualBasicConverter.NodesVisitor.c__显示类83_0.b__0(参数语法a,Int32 i)
在System.Linq.Enumerable.d_u5中
2.MoveNext()
在System.Linq.Enumerable.WhereEnumerableInterator1.MoveNext()中
在Microsoft.CodeAnalysis.CSharp.SyntaxFactory.SeparatedList[TNode](IEnumerable
1节点)上
在ICSharpCode.CodeConverter.CSharp.VisualBasicConverter.NodesVisitor.VisiTargetUMENTList(ArgumentListSyntax节点)
在Microsoft.CodeAnalysis.VisualBasic.Syntax.ArgumentListSyntax.Accept[TResult](VisualBasicSyntaxVisitor1访问者)
在Microsoft.CodeAnalysis.VisualBasic.VisualBasic SyntaxVisitor上
1.访问(SyntaxNode)
在ICSharpCode.CodeConverter.CSharp.CommentConvertingNodesVisitor.DefaultVisite(SyntaxNode节点)
在Microsoft.CodeAnalysis.VisualBasic.VisualBasicSyntaxVisitor1.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](VisualBasicSyntaxVisitor1访问者)
在Microsoft.CodeAnalysis.VisualBasic.VisualBasic SyntaxVisitor上
1.访问(SyntaxNode)
在ICSharpCode.CodeConverter.CSharp.CommentConvertingNodesVisitor.DefaultVisite(SyntaxNode节点)
在Microsoft.CodeAnalysis.VisualBasic.VisualBasicSyntaxVisitor1.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](VisualBasicSyntaxVisitor1访问者)
在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
}