SqlCommand.ExecuteNonQuery()不会在VB.net

时间:2017-06-01 09:44:05

标签: c# .net sql-server vb.net

Me.mycom.CommandText = "INSERT INTO Schritte_WegGruppen VALUES (" & SchrittID.ToString & ", " & WegGruppeID.ToString & ", '...')"
Me.mycom.ExecuteNonQuery()

以上两行在VB .NET中执行得非常好,但是他们在C#中抛出了这个异常:

  

声明已经结束。违反PRIMARY KEY限制" PK_Schritte_WegGruppen_ID_Schritte_ID_WegGruppen"。无法将重复键插入对象" dbo.steps_pathgroups"。双键值为(1,1)。

此异常完全符合逻辑,我在SQL Server Management Studio中执行此查询时也会遇到相同的异常。我在运行它时期望VB代码出错,但我没有得到任何异常。我不懂为什么。

ExecuteNonQuery()在VB.Net和C#中的工作方式有何不同?

以下是我试图转换为C#的完整VB代码。

 Try
        '*** In die Modul Datenbank wechseln ***
        Me.mycom.CommandText = "USE " & ModulDB
        Me.mycom.ExecuteNonQuery()

        Me.mycom.CommandText = "INSERT INTO Schritte_WegGruppen VALUES (" & SchrittID.ToString & ", " & WegGruppeID & ", '...')"
        Me.mycom.ExecuteNonQuery()

        Return 1
    Catch ex As Exception
        Me.ErrMess = ex.Message
        Return -1

翻译的C#代码在这里:

try 
{
    //*** In die Modul Datenbank wechseln ***
    this.mycom.CommandText = "USE " + ModulDB;
    this.mycom.ExecuteNonQuery();

    this.mycom.CommandText = "INSERT INTO Schritte_WegGruppen VALUES (" + SchrittID.ToString() + ", " + WegGruppeID.ToString() + ", '...')";
    this.mycom.ExecuteNonQuery();

    return 1;
}
catch (Exception ex)
{
    this.ErrMess = ex.Message;
    return -1;
}

我希望我的问题现在更清楚了。

2 个答案:

答案 0 :(得分:1)

ADO.NET - 或更常见的任何库代码 - 几乎总是不知道或不关心调用代码使用的语言。因此,您描述的内容有三个可能的原因:

  • 数据/系统状态在您的两个测试用例中有所不同,这意味着在一种情况下确实没有错误,但在另一种情况下 - 因为他们正在谈论不同的场景
  • 这是错误的,但你有一些周围的异常处理代码(通常是try / catchOn Error)吞噬异常
  • 您在两种语言之间翻译代码时出错,而您正在执行的实际字符串不同

答案 1 :(得分:0)

将 ex 作为异常捕获

请将 Catch ex As Exception 替换为 Catch ex As SqlException,我遇到了同样的问题,现在我可以捕获异常了。