如何修复我的"指定的演员表是无效的"错误在这里?

时间:2016-12-08 20:48:45

标签: c# asp.net .net sql-server

我试图在插入语句上使用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()并发生了同样的事情。

2 个答案:

答案 0 :(得分:0)

删除

OUTPUT INSERTED.ID

并添加

选择SCOPE_IDENTITY()

到最后,在引号内

ExecuteQuery期望在结果集中返回一个与输出变量不同的值。 InvalidCastException来自尝试将结果集(为空)转换为int。

答案 1 :(得分:0)

尝试:

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

当期望SQL Server返回Int32并获取Int16时,代码中发生了CAST异常。