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;
}
このように挿入とc#を行うとExecuteScalar()
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()
次のエラーをスローします
「指定されたキャストは無効です