PDA

View Full Version : خطا هنگام درج داده ها با استفاده از stored procedure



Marzieh_A
جمعه 25 دی 1388, 15:16 عصر
من وقتی می خوام رکوردی رو در جدولی که دارای Identity column هست درج کنم، نیاز به مقدار این Identity column داره.اگر این مقدار رو ندم error میده متغیر مربوط به ستون ID که در stored procedure مورد نظر با @ID مشخص شده پاس نشده. و اگر هم مقدار این فیلد رو بدم خطای زیر رو میده



Explicit value must be specified for identity column in table 'Log_usr' either when IDENTITY_INSERT is set to ON or when a replication user is inserting into a NOT FOR REPLICATION identity column.


یه راه حل در نظر گرفتم که اول max آی دی هایی رو که تو حدول دارم بگیرم بعد به تابعی که برای insert کردن نوشتم پاس کنم اما error زیر رو میده



Error converting data type varchar to bigint.


البته باید بگم که تابع یا کلاسی که برای این بازیابی اطلاعات نوشتم(که max رو میگیره) به صورت زیر هستش



public int User_Log_Count(int TypeSql)
{

SqlConnection MyConnection = new SqlConnection("Data Source=PC;Initial Catalog=nemoone;Integrated Security=True");
SqlCommand cmd1 = new SqlCommand("SP_Log_usr", MyConnection);
MyConnection.Open();
cmd1.CommandType = CommandType.StoredProcedure;
cmd1.Parameters.Add(new SqlParameter("@TypeSql", SqlDbType.SmallInt)).Value = TypeSql;
cmd1.Parameters.Add(new SqlParameter("@ID", SqlDbType.BigInt)).Value = 1;
return (cmd1.ExecuteNonQuery());
MyConnection.Close();

}


و اون قسمت از stored procedure iم که این کار رو می کنه به صورت زیر هستش



set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go





-- Create the stored procedure.

ALTER PROCEDURE [dbo].[SP_Log_usr]
@TypeSql smallint = 0 ,
@ID bigint,
@IdUser int = 0 ,
@DateRunSql nvarchar(50) = null ,
@Field_Value ntext = null ,
@NameForm nvarchar(50) = null ,
@NameTable nvarchar(50) = null ,
@TyoeSql nvarchar(1) = null ,
@SqlCommand ntext = null ,
@Marhale smallint = 0

AS
BEGIN

if @TypeSql=5
begin
declare @Max AS bigint ;
set @Max=0;
select @Max=MAx('ID') from Log_usr;
return @Max;
end
return 0

END


اگر ممکنه بگید مشکل کارم کجاست چون واقعا هر کاری می کنم درست نمیشه :ناراحت:

hakelberfin
جمعه 25 دی 1388, 18:48 عصر
سلام
فیلدی که از نوع Identity تعریف شده ، باید توسط خود SQL مقدار دهی بشه. شما نمیتونین اونو مقداردهی کنین .
نحوه تعریف Procedure شما هم اشتباهه.
شما پارامتری از نوع Identity تعریف کردین که در حالت Insert در Procedure برای اون مقداری نمیدین.
و زمانی که مقداری براش نمیدین ، خطا گرفته میشه.این پارامتر رو حذف کنین.
سوال دیروز شما هم در این مورد بود .اگه به برنامه ای که گفته بودم خوب توجه میکردین متوجه میشدین.