PDA

View Full Version : برگرداندن id رکورد ثبت شده در asp.net



mohandesee
چهارشنبه 20 دی 1391, 10:52 صبح
من یک جدول در sql دارم الان همزمان 5تا رکورد میخوام توش درج کنم طوریکه id بالایی به عنوان parent_id بعدی درج بشه واس همین باید id رکورد قبلی رو بگیرم .راه حل چیه؟

alireza.zahani
چهارشنبه 20 دی 1391, 10:55 صبح
میشه با linq این کارو انجام داد
یا ado هم میشه

mohandesee
چهارشنبه 20 دی 1391, 11:02 صبح
میشه با linq این کارو انجام داد
یا ado هم میشه
خوب چجوری؟شما کدش رو دارید؟میشه بنویسید.ممنونم

alireza.zahani
چهارشنبه 20 دی 1391, 11:09 صبح
#region

GetMaxCod



public virtual long GetMaxCod()

{



string StrSql = "";



long MaxCod = 0;



SqlConnection Con = new SqlConnection("کانکشن شما");



SqlDataAdapter da = new SqlDataAdapter();



SqlCommand cmd = new SqlCommand();



DataTable dt = new DataTable();



try

{

StrSql =

"SELECT Max(Cod ") AS MaxCod FROM ["جدول شما"] ";

cmd.CommandText = StrSql;



if (Con.State != ConnectionState.Open)

Con.Open();

cmd.Connection = Con;

da.SelectCommand = cmd;

da.Fill(dt);



if (Con.State != ConnectionState.Closed)

Con.Close();



if (dt == null)

MaxCod = 1;



else

MaxCod =

long.Parse(dt.Rows[0]["MaxCod"].ToString());

MaxCod = (MaxCod <= 0) ? 1 : (MaxCod + 1);



return MaxCod;

}



catch

{



return 1;

}

}

#endregion

alireza.zahani
چهارشنبه 20 دی 1391, 11:10 صبح
با linq هم براتون میزارم
ولی خارج وقت اداری

mohandesee
چهارشنبه 20 دی 1391, 11:17 صبح
#region

GetMaxCod



SqlDataAdapter da = newSqlDataAdapter();



SqlCommand cmd = newSqlCommand();



DataTable dt = newDataTable(); اینا خالی باشن؟؟؟؟؟؟؟؟؟؟؟


public virtual long GetMaxCod()

{



string StrSql = "";



long MaxCod = 0;



SqlConnection Con = new SqlConnection("کانکشن شما");



SqlDataAdapter da = new SqlDataAdapter();



SqlCommand cmd = new SqlCommand();



DataTable dt = new DataTable();



try

{

StrSql =

"SELECT Max(Cod ") AS MaxCod FROM ["جدول شما"] ";

cmd.CommandText = StrSql;



if (Con.State != ConnectionState.Open)

Con.Open();

cmd.Connection = Con;

da.SelectCommand = cmd;

da.Fill(dt);



if (Con.State != ConnectionState.Closed)

Con.Close();



if (dt == null)

MaxCod = 1;



else

MaxCod =

long.Parse(dt.Rows[0]["MaxCod"].ToString());

MaxCod = (MaxCod <= 0) ? 1 : (MaxCod + 1);



return MaxCod;

}



catch

{



return 1;

}

}

#endregion




SqlDataAdapter da = newSqlDataAdapter();



SqlCommand cmd = newSqlCommand();



DataTable dt = newDataTable();
ممنون اینا خالی باشن؟؟؟ بعد خروجی اینو بدم به یک متغییر و اونو در insert بعدی در جدول درج کنم؟؟؟

alireza.zahani
چهارشنبه 20 دی 1391, 11:21 صبح
برای تشکر از دکمه تشکر کردن اشتفاده کنین
خزوجی این کد یک عدد هست که شماره آخرین رکورد شماست

mohandesee
چهارشنبه 20 دی 1391, 14:50 عصر
معذرت اخه اولین باره که من از اینجا سوالمو پرسیدم زیاد وارد نیستم.
قسمت linq رو فراموش نکنید.

fakhravari
چهارشنبه 20 دی 1391, 15:09 عصر
این پست چی.
من کی هیچی ازش سر درنیوردم.
عزیزان این چه وضع پست زدنه

alihassanabadi
چهارشنبه 20 دی 1391, 18:01 عصر
من کی هیچی ازش سر درنیوردم.یکم دقت کن سر در میاری

عزیزان این چه وضع پست زدنه
کاربر تازه وارد ندیدی مشکلش اینه که کدهاشو تو بلاک code نذاشته
بجای سرزنش میتونی کمک کنی.

mohandesee
چهارشنبه 20 دی 1391, 19:05 عصر
یکم دقت کن سر در میاری

کاربر تازه وارد ندیدی مشکلش اینه که کدهاشو تو بلاک code نذاشته
بجای سرزنش میتونی کمک کنی.
یعنی چی؟
ببینید منظور من اینه
select id from main where fieldname=session
این جواب میده ؟؟اما قسمت شرط رو چجوری باید بنویسم؟

alihassanabadi
چهارشنبه 20 دی 1391, 19:30 عصر
یعنی چی؟
ببینید منظور من اینه
select id from main where fieldname=session
این جواب میده ؟؟اما قسمت شرط رو چجوری باید بنویسم؟

منظور با شما نبود در رابطه با پست شماره 9 بود
و اما طبق عنوان تاپیکتون برای برگرداندن کلید رکورد ثبت شده در asp.net روش های زیادی وجود داره
اما شما میتونید توسط تابع SCOPE_IDENTITY() آی دی(کلید) رکورد ثبت شده رو بدست بیاری بعد دستور insert
فرض پروسجر اضافه کردن رکورد جدید به این شکله
در sql



CREATE PROC sp_getIdentity
@id int output,
@name varchar(20)
as

INSERT INTO t1 (name) VALUES (@name);
select @id = SCOPE_IDENTITY()
go

و حالا تو asp


SqlCommand cmd = new SqlCommand("sp_getIdentity", connection);
connection.Open();
SqlParameter sp = new SqlParameter("@id", SqlDbType.Int);
sp.Direction = ParameterDirection.Output;
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(sp);
int id = sp.Value.ToString();

حال متغییر id میشه کلید آخرین رکورد ثبت شده میتونی این به عنوان parentID رکورد بعد به کار ببری.

mohandesee
پنج شنبه 21 دی 1391, 08:51 صبح
منظور با شما نبود در رابطه با پست شماره 9 بود
و اما طبق عنوان تاپیکتون برای برگرداندن کلید رکورد ثبت شده در asp.net روش های زیادی وجود داره
اما شما میتونید توسط تابع SCOPE_IDENTITY() آی دی(کلید) رکورد ثبت شده رو بدست بیاری بعد دستور insert
فرض پروسجر اضافه کردن رکورد جدید به این شکله
در sql



CREATE PROC sp_getIdentity
@id int output,
@name varchar(20)
as

INSERT INTO t1 (name) VALUES (@name);
select @id = SCOPE_IDENTITY()
go

و حالا تو asp


SqlCommand cmd = new SqlCommand("sp_getIdentity", connection);
connection.Open();
SqlParameter sp = new SqlParameter("@id", SqlDbType.Int);
sp.Direction = ParameterDirection.Output;
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(sp);
int id = sp.Value.ToString();

حال متغییر id میشه کلید آخرین رکورد ثبت شده میتونی این به عنوان parentID رکورد بعد به کار ببری.

ممنون کدتون رو امتحان میکنم اما ببینید این کد جواب نمیده؟؟

protected void Page_Load(object sender, EventArgs e)
{
lblmission.Text = Session["mission"].ToString();
string title = lblmission.ToString();

lblgoal.Text = Session["sgoal"].ToString();
lblgoal1.Text = Session["goal"].ToString();
string title1 = lblgoal.ToString();

lblpolicy.Text = Session["policy"].ToString();
lblcat.Text = Session["cat"].ToString();
lblact.Text= Session["act"].ToString();
string title2 = lblact.ToString();

lblindic.Text = Session["inc"].ToString();
string title3 = lblindic.ToString();

lblprog.Text = Session["prog"].ToString();
lblstr.Text= Session["strgy"].ToString();
string title4 = lblstr.ToString();

lbltime.Text = Session["time"].ToString();
}
protected void Button1_Click(object sender, EventArgs e)
{

SqlCommand cmd = new SqlCommand("insert into tbl_main(title,type_id,parent_id) values(N'" + Session["mission"].ToString() + "',1,0);" +
"select id from tbl_main", cn);
cn.Open();
cmd.ExecuteNonQuery();
string str = string.Empty;
SqlDataAdapter da = new SqlDataAdapter("select id from tbl_main where title=title", cn);
DataSet ds = new DataSet();
da.Fill(ds, "table");
int j = 1;
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
str += ds.Tables[0].Rows[i]["id"];
j++;
}
cn.Close();
//************************************************** ************************************************** *************************
SqlCommand cmd1 = new SqlCommand("insert into tbl_main(title,type_id,parent_id,cat_id) values(N'" + Session["sgoal"].ToString() + "',2,'" + str.ToString() + "','" + Session["cat"].ToString() + "');" +
"select id from tbl_main", cn);
cn.Open();
cmd1.ExecuteNonQuery();
string str1 = string.Empty;
SqlDataAdapter da1 = new SqlDataAdapter("select id from tbl_main where title=title1 ", cn);
DataSet ds1 = new DataSet();
da1.Fill(ds1, "table");
int j1 = 1;
for (int i = 0; i < ds1.Tables[0].Rows.Count; i++)
{
str1 += ds1.Tables[0].Rows[i]["id"];
j1++;
}
cn.Close();
//************************************************** ************************************************** *************************
SqlCommand cmd2 = new SqlCommand("insert into tbl_main(title,type_id,parent_id) values(N'" + Session["strgy"].ToString() + "',3,'" + str1.ToString() + "');" +
"select id from tbl_main", cn);
cn.Open();
cmd2.ExecuteNonQuery();
string str2 = string.Empty;
SqlDataAdapter da2 = new SqlDataAdapter("select id from tbl_main where title=@title4", cn);
DataSet ds2 = new DataSet();
da2.Fill(ds2, "table");
int j2 = 1;
for (int i = 0; i < ds2.Tables[0].Rows.Count; i++)
{
str2 += ds2.Tables[0].Rows[i]["id"];
j2++;
}
cn.Close();
//************************************************** ************************************************** *************************
SqlCommand cmd3 = new SqlCommand("insert into tbl_main(title,type_id,parent_id) values(N'" + Session["act"].ToString() + "',4,'" + str2.ToString() + "');" +
"select id from tbl_main", cn);
cn.Open();
cmd3.ExecuteNonQuery();
string str3 = string.Empty;
SqlDataAdapter da3 = new SqlDataAdapter("select id from tbl_main where title=@title2", cn);
DataSet ds3 = new DataSet();
da3.Fill(ds3, "table");
int j3 = 1;
for (int i = 0; i < ds3.Tables[0].Rows.Count; i++)
{
str3 += ds3.Tables[0].Rows[i]["id"];
j3++;
}
cn.Close();
//************************************************** ************************************************** *************************
SqlCommand cmd4 = new SqlCommand("insert into tbl_main(title,type_id,parent_id,prog) values(N'" + Session["inc"].ToString() + "',5,'" + str3.ToString() + "','" + Session["prog"].ToString() + "');" +
"select id from tbl_main", cn);
cn.Open();
cmd4.ExecuteNonQuery();
cn.Close();
Response.Write("<script>alert('ثبت اطلاعات با موفقیت انجام شد');</script>");
System.Threading.Thread.Sleep(5000);
}

mohandesee
دوشنبه 25 دی 1391, 19:23 عصر
چی شد؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟ ؟؟؟؟؟؟؟؟؟؟؟؟/

اوبالیت به بو
سه شنبه 26 دی 1391, 16:39 عصر
درود

درهنگام Insert در تابع StoredProcedure مورد نظر، بعد از Insert دستور SCOPE_IDENTITY رو بنویسید. هنگام اجرای SP هم از دستور ExecuteScaler به جای ExecuteNonQuery استفاده کنید.

mohandesee
سه شنبه 26 دی 1391, 16:46 عصر
درود

درهنگام Insert در تابع StoredProcedure مورد نظر، بعد از Insert دستور SCOPE_IDENTITY رو بنویسید. هنگام اجرای SP هم از دستور ExecuteScaler به جای ExecuteNonQuery استفاده کنید.
ببخشید کجاش دقیقا؟؟SCOPE_IDENTITY رو بنویسم؟؟؟

اوبالیت به بو
سه شنبه 26 دی 1391, 18:42 عصر
ببخشید کجاش دقیقا؟؟SCOPE_IDENTITY رو بنویسم؟؟؟

داخل StoreProcedure مورد نظرتون. مثلا فرض کنید کد زیر می خوام یک رکوردی رو ثبت کنه و بعدش مقدار فیلد ID ذخیره شده رو برگردونه:



ALTER Procedure [dbo].[sp_Albums_Insert]
@Branch_ID int = NULL,
@Language_ID int = NULL,
@Category_ID int = NULL,
@User_ID int = NULL,
@AlbumName nvarchar(50) = NULL,
@AlbumCover nvarchar(255) = NULL,
@Description nvarchar(1000) = NULL,
@Date datetime = NULL,
@Status int = NULL
As
Begin
Insert Into Albums
(,[Language_ID],[Category_ID],[User_ID],[AlbumName],[AlbumCover],[Description],[Date],[Status])
Values
(@Branch_ID,@Language_ID,@Category_ID,@User_ID,@Al bumName,@AlbumCover,@Description,@Date,@Status)


[B] Select SCOPE_IDENTITY()

End

mohandesee
سه شنبه 26 دی 1391, 22:45 عصر
مشکلم با دستکاری همون کد خودم درست شد................کلا از همگی ممنونممممممم