【发布时间】:2013-05-02 20:43:46
【问题描述】:
SQL 插入问题。运行存储过程以向表中插入行并返回创建的 ID。当我像这样运行它并有一个输出参数 @ID 并使用 ExecuteNonQuery() 它为我的 int idinserted 返回 -1 但确实给了我插入的 ID。自从插入记录以来,它不应该返回 1。我想使用 ExecuteNonQuery 来检查记录是否被插入,然后获取插入的 ID。
SQL 插入
@person bigint,
@date datetime,
@ID bigint OUTPUT
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO table(person,DATE_ADDED)
VALUES (@person,@date)
SELECT @ID = SCOPE_IDENTITY()
cmd.Parameters.Clear();
cmd.Parameters.AddWithValue("@person", person);
cmd.Parameters.AddWithValue("@date", DateTime.Now);
SqlParameter output = new SqlParameter("@ID", SqlDbType.Int);
output.Direction = ParameterDirection.Output;
cmd.Parameters.Add(output);
int idinserted = (int)cmd.ExecuteNonQuery();
if (idinserted > 0)
{
int ID = output.Value;
}
当我使用 ExecuteScalar() 进行插入和 c# 时
SQL INSERT
@person bigint,
@date datetime
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO table(person ,DATE_ADDED)
VALUES(@person,@date )
SELECT SCOPE_IDENTITY()
cmd.Parameters.Clear();
cmd.Parameters.AddWithValue("@person", person);
cmd.Parameters.AddWithValue("@date", DateTime.Now);
long ID = (long)cmd.ExecuteNonScalar();
ExecuteScalar() 抛出以下错误
"指定的强制转换无效
【问题讨论】:
-
抱歉,这不是刚刚检查的问题。
-
OK,但是记录是否已经插入?
标签: c# sql insert executenonquery executescalar