C# 插入数据并选择最后一个id时出错
我想在向表中插入一行数据后获取id,但出现错误: System.InvalidCastException:指定的强制转换无效 这是我的密码C# 插入数据并选择最后一个id时出错,c#,sql-server,sql-insert,executescalar,C#,Sql Server,Sql Insert,Executescalar,我想在向表中插入一行数据后获取id,但出现错误: System.InvalidCastException:指定的强制转换无效 这是我的密码 SqlCommand cmd_insert = new SqlCommand("insert into ITM_OrderItem (ITM_Code, ITM_Desc, ORCAT_Desc, ORSCT_Desc, ARCBG_Abbrev, ARCSG_Desc, ARCSC_Code, ARCIM_DerivedFeeItem, OPD_Price
SqlCommand cmd_insert = new SqlCommand("insert into ITM_OrderItem (ITM_Code, ITM_Desc, ORCAT_Desc, ORSCT_Desc, ARCBG_Abbrev, ARCSG_Desc, ARCSC_Code, ARCIM_DerivedFeeItem, OPD_Price, IPD_Price, Tou_Price, App_Status, SITES, CSSUSR_RowId, CSSUSR_DepId, CSSUSR_PosId , CDate, MDate) values('"
+ dt.Rows[i]["EARCIM_Code"].ToString() + "','"
+ dt.Rows[i]["EARCIM_Desc"].ToString() + "','"
+ dt.Rows[i]["EORCAT_Desc"].ToString() + "','"
+ dt.Rows[i]["EARCIC_Desc"].ToString() + "','"
+ dt.Rows[i]["EARCBG_Abbrev"].ToString() + "','"
+ dt.Rows[i]["EARCSG_Desc"].ToString() + "','"
+ dt.Rows[i]["EARCSC_Desc"].ToString() + "','"
+ dt.Rows[i]["EARCIM_DerivedFeeItem"].ToString() + "','"
+ dt.Rows[i]["OPD"].ToString() + "','"
+ dt.Rows[i]["IPD"].ToString() + "','"
+ dt.Rows[i]["Tourist"].ToString() + "','"
+ status_app + "','"
+ usr_site + "','"
+ usrID + "','"
+ Dep_RowId + "','"
+ Pos_RowId + "','"
+ Cdate + "','"
+ Cdate + "') select SCOPE_IDENTITY()", conEMR);
// error on this line
insert_RowId = (Int32)cmd_insert.ExecuteScalar();
非常感谢。您的表ITM_OrderItem中的identity列似乎没有使用int作为数据类型,我可以猜测它是一个bigint数据类型,如果是这种情况,您应该将代码中的行更改为:
insert_RowId = (Int64)cmd_insert.ExecuteScalar();
另外,请确保在C代码声明中将变量“insert_RowId”的数据类型更改为Int64。删除数值数据类型的引号,即单引号。请查看SQL注入并使用参数化查询,而不是文本查看您是否介意显示ITM_OrderItem表的架构?我想从insert接收id数据此命令在sql查询中工作正常。表ITM_OrderItem的Identity列的数据类型是什么。Identity列的数据类型是int[ITM_RowId]int Identity 1,1不为NULL,在这种情况下,问题不在于C代码中的数据类型行和转换。现在我可以打赌insert语句无法返回“select SCOPE_IDENTITY”的空值,因此您应该尝试从代码生成插入的T-SQL,在SQL Server Management Studio中运行T-SQL并相应地进行修复。似乎是在insert语句中传递字符数据,其中需要数字数据,反之亦然。如果你能共享表的模式,我肯定能在这方面帮助你。我尝试使用dbug-process并复制cmd来编写sql查询,效果很好。