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;
}
我希望我的问题现在更清楚了。
答案 0 :(得分:1)
ADO.NET - 或更常见的任何库代码 - 几乎总是不知道或不关心调用代码使用的语言。因此,您描述的内容有三个可能的原因:
try
/ catch
或On Error
)吞噬异常答案 1 :(得分:0)
请将 Catch ex As Exception 替换为 Catch ex As SqlException,我遇到了同样的问题,现在我可以捕获异常了。