我试图在插入语句上使用SMALLINT
获取OUTPUT
的ID并使用DataContext.ExecuteQuery
(或者DataContext
方法更多适当)。
尝试:
string query = $@"
DELETE FROM MyTable WHERE [Name] = '{name}'
INSERT INTO MyTable ([Name], ...)
OUTPUT INSERTED.ID
VALUES ('{name}', ...)";
short id = (short)context.ExecuteQuery<int>(query).Single();
我收到了错误
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)
我尝试使用SCOPE_IDENTITY()
并发生了同样的事情。
答案 0 :(得分:0)
删除
OUTPUT INSERTED.ID
并添加
选择SCOPE_IDENTITY()
到最后,在引号内
ExecuteQuery期望在结果集中返回一个与输出变量不同的值。 InvalidCastException来自尝试将结果集(为空)转换为int。
答案 1 :(得分:0)
尝试:
short id = context.ExecuteQuery<short>(query).Single();
当期望SQL Server返回Int32并获取Int16时,代码中发生了CAST异常。