c#
  • asp.net
  • .net
  • sql-server
  • 2016-12-08 10 views 1 likes 
    1

    私はSMALLINTのIDを取得しようとしています。OUTPUTを挿入ステートメントに、DataContext.ExecuteQuery(またはもっと適切な方法でDataContextを使用してください)を使用しています。ここで「指定されたキャストは無効です」というエラーを修正できますか?

    試み:

      string query = [email protected]" 
           DELETE FROM MyTable WHERE [Name] = '{name}' 
           INSERT INTO MyTable ([Name], ...) 
           OUTPUT INSERTED.ID 
           VALUES ('{name}', ...)"; 
          short id = (short)context.ExecuteQuery<int>(query).Single(); 
    

    と私はSCOPE_IDENTITY()を使用してみましたし、同じことが起こっ

    System.InvalidCastException was unhandled by user code 
        HResult=-2147467262 
        Message=Specified cast is not valid. 
        Source=System.Data 
        StackTrace: 
         at System.Data.SqlClient.SqlBuffer.get_Int32() 
         at System.Data.SqlClient.SqlDataReader.GetInt32(Int32 i) 
         at Read_Int32(ObjectMaterializer`1) 
         at System.Data.Linq.SqlClient.ObjectReaderCompiler.ObjectReader`2.MoveNext() 
         at System.Linq.Enumerable.Single[TSource](IEnumerable`1 source) 
    

    エラーが発生します。

    +0

    クエリは有効ですか?あなたが '@'を使っているので、あなたの 'query'文字列は改行で始まります。同じ行の文字列を開始することで削除できます: 'string query = $ @" MyTable WHERE [Name] = '{name}' ... "'から削除します。 – Quantic

    +0

    @Quanticそれは問題ではありません – Hogan

    +0

    空のリストでSingleが失敗します。 'FirstOrDefault()'を試して、それが役立つかどうか確認してください。 – Hogan

    答えて

    0

    OUTPUT INSERTED.ID

    を削除し、

    を追加します。引用符

    のexecuteQuery内側選択SCOPE_IDENTITY()端に

    は、値は、出力変数は異なる結果セットに返されることを期待します。 InvalidCastExceptionは、結果セット(null)をintに変換しようとしたことに起因します。

    0

    試してみてください。のInt32を返すために、SQL Serverのを期待してInt16型を取得していたときに

    short id = context.ExecuteQuery<short>(query).Single(); 
    

    例外を投げコードで起こっています。

    関連する問題