2017-06-01 3 views
0
Me.mycom.CommandText = "INSERT INTO Schritte_WegGruppen VALUES (" & SchrittID.ToString & ", " & WegGruppeID.ToString & ", '...')" 
Me.mycom.ExecuteNonQuery() 

に予想されるエラーを投げていない上記の2行はVB .NETで完全に罰金実行しますが、それらはC#でこの例外をスロー:SqlCommand.ExecuteNonQuery()VB.net

文が終了しました。 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; 
} 

は、私は私の質問は今明確であると思います。

+1

では、あなたがあなたのVB.netコードで 'てみてください/ catch'のestructureを持っていませんか? – Pikoh

+2

私と一緒に "do"、 "not"、 "concatenate"、 "input"、 "into"、 "sql" ...と言ってください...真剣に言えば、そのコードは**大規模なSQLIリスクです。しかし、VBコードでは、例外を飲み込む可能性のあるエラー処理コードがありますか? –

+0

あなたは私たちにC#コード – jamiedanq

答えて

1

ADO.NET - より一般的には、のライブラリコード - ほとんどの場合、呼び出しコードがどの言語を使用しているかわからないか気にしません。

  • データ/システム状態は、それが真に一つのケースでをerroringされていないことを意味し、あなたの2つのテストケースで異なりますが、である:そのように、あなたが記述何のための3つの可能性が高い理由があります他の - 彼らはそれがerroringさの異なるシナリオ
  • について話しているが、あなたは、いくつかの周囲の例外処理コード(通常:try/catchまたはOn Error)を持っているので、あなたがエラー翻訳をした例外
  • を嚥下しています2つの言語間のコードES、あなたが実行している実際の文字列が異なる
+0

私はまったく同じデータベースと同じテーブルを使用しています。 SQL照会呼び出しの前の最終値をチェックし、それらが同一であることを確認します。実際、SQL Server管理スタジオで直接実行してVBコードを渡すと、VBコードでフレーム化されたSQLクエリ文字列が失敗するという問題があります。これは私にとって非常に奇妙です。 – user2139876

+0

@ user2139876もう一度:それを取り巻くエラー処理コードを確認してください。 'ExecuteNonQuery()'の後に 'Console.WriteLine(" yay、私はここにいる! ");'(またはそれに類似する) –

+0

ただチェックしました。いいえ、そうではありません。例外はExecuteNonQuery()でスローされます – user2139876