私は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)
エラーが発生します。
クエリは有効ですか?あなたが '@'を使っているので、あなたの 'query'文字列は改行で始まります。同じ行の文字列を開始することで削除できます: 'string query = $ @" MyTable WHERE [Name] = '{name}' ... "'から削除します。 – Quantic
@Quanticそれは問題ではありません – Hogan
空のリストでSingleが失敗します。 'FirstOrDefault()'を試して、それが役立つかどうか確認してください。 – Hogan