PDA

View Full Version : سوال: ذخیره دسته جمعی چند رکورد در بانک



r_khan
دوشنبه 13 اردیبهشت 1389, 01:42 صبح
من یه تابع add ساختم برای درج به صورت زیر


public bool ADD()
{
try
{
SqlConnection cnn = new SqlConnection(con.ConnectString());
cmd.Connection = cnn;

cmd.CommandText = "insert into gol (id_game, player, tedadgol)values(@id_game,@player,@tedadgol)";
cmd.Parameters.AddWithValue("@id_game", id);
cmd.Parameters.AddWithValue("@player", player);
cmd.Parameters.AddWithValue("@tedadgol", tedadgol);
if (cnn.State != ConnectionState.Open)
cnn.Open();
cmd.ExecuteNonQuery();
cnn.Close();
return true;
}
catch
{
return false;
}


}


حالا مشکلم اینه که وقتی میخوام چندتا رکورد را با هم add کنم error میده ولی یکی یکی مشکلی نیست
چطور میشه چند تا رکورد را یکدفعه add کرد؟؟

اَرژنگ
دوشنبه 13 اردیبهشت 1389, 07:43 صبح
من یه تابع add ساختم برای درج به صورت زیر


public bool ADD()
{
try
{
SqlConnection cnn = new SqlConnection(con.ConnectString());
cmd.Connection = cnn;

cmd.CommandText = "insert into gol (id_game, player, tedadgol)values(@id_game,@player,@tedadgol)";
cmd.Parameters.AddWithValue("@id_game", id);
cmd.Parameters.AddWithValue("@player", player);
cmd.Parameters.AddWithValue("@tedadgol", tedadgol);
if (cnn.State != ConnectionState.Open)
cnn.Open();
cmd.ExecuteNonQuery();
cnn.Close();
return true;
}
catch
{
return false;
}


}


حالا مشکلم اینه که وقتی میخوام چندتا رکورد را با هم add کنم error میده ولی یکی یکی مشکلی نیست
چطور میشه چند تا رکورد را یکدفعه add کرد؟؟

id, player, tedadegol از آسمان نازل شدند، به جایه اینکه به شکل سراسری ازشان استفاده کنید با پارامتر به این متد پاسشان بدید، بعد از تغییر کد دلیل اشکال خود به خود از بین میره.

r_khan
دوشنبه 13 اردیبهشت 1389, 14:56 عصر
id, player, tedadegol از آسمان نازل شدند، به جایه اینکه به شکل سراسری ازشان استفاده کنید با پارامتر به این متد پاسشان بدید، بعد از تغییر کد دلیل اشکال خود به خود از بین میره.


این تابع در یک کلاس هست و id, player, tedadegol متغیر های کلاس هستند

کلاس ر ا اینجا میذارم




publicclassClass1
{

SqlCommand cmd = newSqlCommand();
privatestring player;
privateint dagige;
privateint id;
classes.ConnectionString con = new WorldCup.classes.ConnectionString();
privatestring team;
privateint tedadgol;

publicstring Player
{
get
{
return player;
}
set
{
player = value;
}
}
publicint Dagige
{
get
{
return dagige;
}
set
{
dagige = value;
}
}
publicint Id
{
get
{
return id;
}
set
{
id = value;
}
}
publicstring Team
{
get
{
return team;
}
set
{
team = value;
}
}
publicint Tedadgol
{
get
{
return tedadgol;
}
set
{
tedadgol = value;
}
}
publicbool ADD()
{
try
{
SqlConnection cnn = newSqlConnection(con.ConnectString());
cmd.Connection = cnn;

cmd.CommandText = "insert into gol (id_game, player, tedadgol)values(@id_game,@player,@tedadgol)";
cmd.Parameters.AddWithValue("@id_game", id);
cmd.Parameters.AddWithValue("@player", player);
cmd.Parameters.AddWithValue("@tedadgol", tedadgol);
if (cnn.State != ConnectionState.Open)
cnn.Open();
cmd.ExecuteNonQuery();
cnn.Close();
returntrue;
}
catch
{
returnfalse;
}

}
}

اَرژنگ
دوشنبه 13 اردیبهشت 1389, 15:06 عصر
کد استفاده را هم قرار بدید.


این تابع در یک کلاس هست و id, player, tedadegol متغیر های کلاس هستند

کلاس ر ا اینجا میذارم




publicclassClass1
{

SqlCommand cmd = newSqlCommand();
privatestring player;
privateint dagige;
privateint id;
classes.ConnectionString con = new WorldCup.classes.ConnectionString();
privatestring team;
privateint tedadgol;

publicstring Player
{
get
{
return player;
}
set
{
player = value;
}
}
publicint Dagige
{
get
{
return dagige;
}
set
{
dagige = value;
}
}
publicint Id
{
get
{
return id;
}
set
{
id = value;
}
}
publicstring Team
{
get
{
return team;
}
set
{
team = value;
}
}
publicint Tedadgol
{
get
{
return tedadgol;
}
set
{
tedadgol = value;
}
}
publicbool ADD()
{
try
{
SqlConnection cnn = newSqlConnection(con.ConnectString());
cmd.Connection = cnn;

cmd.CommandText = "insert into gol (id_game, player, tedadgol)values(@id_game,@player,@tedadgol)";
cmd.Parameters.AddWithValue("@id_game", id);
cmd.Parameters.AddWithValue("@player", player);
cmd.Parameters.AddWithValue("@tedadgol", tedadgol);
if (cnn.State != ConnectionState.Open)
cnn.Open();
cmd.ExecuteNonQuery();
cnn.Close();
returntrue;
}
catch
{
returnfalse;
}

}
}

r_khan
سه شنبه 14 اردیبهشت 1389, 02:00 صبح
کد استفاده را هم قرار بدید.


این کد استفاده در روال کلیک



privatevoid btnsave_Click(object sender, EventArgs e)
{




foreach (Control item inthis.Controls)
{
if (item.Name == "flowLayoutPanel1" || item.Name == "flowLayoutPanel2")
{
gol.Id = Convert.ToInt32(lab1.Text); ;
}
if (item.GetType() == typeof(FlowLayoutPanel))
{
foreach (Control c in item.Controls)
{
if (c.GetType() == typeof(ComboBox) )
{
gol.Player = (string)((ComboBox)c).SelectedItem;


}
if (c.GetType() == typeof(TextBox))
{
gol.tedadgol = (string)((TextBox)c).Text;
gol.ADD();
}
}
}
}

}

اَرژنگ
سه شنبه 14 اردیبهشت 1389, 02:57 صبح
این کد استفاده در روال کلیک



privatevoid btnsave_Click(object sender, EventArgs e)
{




foreach (Control item inthis.Controls)
{
if (item.Name == "flowLayoutPanel1" || item.Name == "flowLayoutPanel2")
{
gol.Id = Convert.ToInt32(lab1.Text); ;
}
if (item.GetType() == typeof(FlowLayoutPanel))
{
foreach (Control c in item.Controls)
{
if (c.GetType() == typeof(ComboBox) )
{
gol.Player = (string)((ComboBox)c).SelectedItem;


}
if (c.GetType() == typeof(TextBox))
{
gol.tedadgol = (string)((TextBox)c).Text;
gol.ADD();
}
}
}
}

}


تویه این هرج و مرج نمیشه کار کرد، اول یک لیست از مقدارهایی که لازم هستند ذخیره بشند بسازید یا اینکه مقادیری را که لازم است ذخیره بشند را این کد تفکیک کردن جدا کنید.
این روش از چهار تا if استفاده میکنه، و ذخیره کردنش به آخرین if وابسته است. کد زیادی و بیجهت شلوغه.
اگرچه ممکن است که یکی همین کد را راه بندازه، ولی ضررش به سوده‌اش نمیارزه.
برایه شروع :
اول id, player, tedadegol با پارامتر به این متد Add پاسشان بدید،
دوماً یک لیست از مقادیری که قرار است ذخیره بشند ایجاد کنید و بعدش به متد Add ذخیره‌شان کنید.
مشکل اصلی از جایه به خصوصی از این کد نیست از این نوع بخصوص کدنویسی که استفاده شده. هرچقدر بیشتر از آرگومنها برایه دسترسی به متغییرات استفاده بشه همانقدر اینکه چه اتفاقی داد میافته را میشه صریحتر دید.
توصیه من این است که سعی نکنید که این کد را راه بندازید، اول مرتبش کنید و این مشکل به خودی خود ناپدید میشه.

اَرژنگ
سه شنبه 14 اردیبهشت 1389, 08:14 صبح
اگر در مورد پاکسازی این کد کمک لازم دارید، پروژه را بفرستید تمیزش کنیم.

r_khan
سه شنبه 14 اردیبهشت 1389, 16:43 عصر
اگر در مورد پاکسازی این کد کمک لازم دارید، پروژه را بفرستید تمیزش کنیم.



پروژه من کامل نیست backup بانک هم گذاشتم من باید وقتی کاربر کلیک کرد id (شماره بازی) و player (بازیکن) و dgige (دقیقه گل) را وارد بانک بکنم اسم بانک(worldcup)

odin_emperor
سه شنبه 14 اردیبهشت 1389, 20:08 عصر
سلام پیشنهاد من اینه که اول یه جدول به صورت موقت بسازی رکورد هارو تو اون جدول ذخیره کنی و در آخر جدول اول رو در جدول اصلی وارد کنی و جدول موقت رو دراپ کنی
موفق باشی

r_khan
چهارشنبه 15 اردیبهشت 1389, 01:40 صبح
سلام پیشنهاد من اینه که اول یه جدول به صورت موقت بسازی رکورد هارو تو اون جدول ذخیره کنی و در آخر جدول اول رو در جدول اصلی وارد کنی و جدول موقت رو دراپ کنی

موفق باشی



فکر کنم اینجوری سرعت میاد پایین من هربار دسترسی یه جدول بسازم بعد در اخر از بین ببرمش :گیج::متفکر:

اَرژنگ
چهارشنبه 15 اردیبهشت 1389, 09:01 صبح
سلام پیشنهاد من اینه که اول یه جدول به صورت موقت بسازی رکورد هارو تو اون جدول ذخیره کنی و در آخر جدول اول رو در جدول اصلی وارد کنی و جدول موقت رو دراپ کنی

موفق باشی


منظور چه نوع جدولی است ؟

r_khan
چهارشنبه 15 اردیبهشت 1389, 15:14 عصر
آقای اَرژنگ منتظر نظرتون در مورد برنامم هستم همانطور که گفته بودید برنامم راگذاشتم

اَرژنگ
چهارشنبه 15 اردیبهشت 1389, 17:25 عصر
آقای اَرژنگ منتظر نظرتون در مورد برنامم هستم همانطور که گفته بودید برنامم راگذاشتم

با سلام،

جواب این توپیک :
" ذخیره دسته جمعی چند رکورد در بانک" در
متد SaveMutipleGoalsToGoalTable() در همان فرم نمایش داده شده.

اگر داده‌هایی را که قرار است در داتابیس ثبت بشند را به اون حالتی که در متد استفاده شده دربیارید کارتان راهه میافته.

مشکل اصلی این پروژه این است که سفت کدی زیادی شده، و بدست آوردن داده‌هایه که بخواهید ذخیره کنید به شکل تفکیکی انجام میشه. داده‌ها باید راحت در درست باشند که بشه باهاشان عملیات انجام داد.

برایه اینکار:
۱.اول فقط با یک رکورد کار کنید، اگر توانستید که یک رکورد را بدانه استفاده از متغییرهایه سراسری در فرم و به شکل صریح با استفاده از پارامترهایه یک متد ذخیره کنید (همانطوری که در متد SaveMutipleGoalsToGoalTable این کار انجام شده)، برایه ادامه میتونم کمک کنم.

همانطوری که گفتم کد نظم نیاز دارد، و اگر این نظم را نشه برایه عملیات بر یک رکورد پابرجا کرد هرج و مرجی که برایه n رکورد بوجود میاد به زحمت درست کردنش نمیارزه.

برایه مثال ساده به این http://barnamenevis.org/forum/showpost.php?p=952137&postcount=32 یک نگاه بندازید.

r_khan
پنج شنبه 16 اردیبهشت 1389, 01:06 صبح
ممنون که راهنماییم کردید کمک بزرگی به من کردید من این مبحث را خیلی خوب یاد گرفتم
فقط یه مشکلی هست من متد SaveMutipleGoalsToGoalTable() را در داخل روال کلیک گذاشتم تا کاردکردش را ببینم این اخطار را داد



{"The variable name '@id_game' has already been declared. Variable names must be unique within a query batch or stored procedure."}

اَرژنگ
پنج شنبه 16 اردیبهشت 1389, 01:28 صبح
ممنون که راهنماییم کردید کمک بزرگی به من کردید من این مبحث را خیلی خوب یاد گرفتم

فقط یه مشکلی هست من متد SaveMutipleGoalsToGoalTable() را در داخل روال کلیک گذاشتم تا کاردکردش را ببینم این اخطار را داد



{"The variable name '@id_game' has already been declared. Variable names must be unique within a query batch or stored procedure."}


پروژه‌ را ( با داتابیسش) کامل بفرستید

r_khan
پنج شنبه 16 اردیبهشت 1389, 01:36 صبح
پروژه‌ را ( با داتابیسش) کامل بفرستید

همون پروژه قبلی بود که چند تاپیک قبلی گذاشتم

اَرژنگ
پنج شنبه 16 اردیبهشت 1389, 02:43 صبح
همون پروژه قبلی بود که چند تاپیک قبلی گذاشتم

خیر همان پروژه قبلی که فرستادید نیست، چونکه در اون پروژه من تغییراتی ایجاد کردم و فرستادم، حالا شما تغییراتی ایجاد کردید و مشکلی را میبینید، در این پروژه‌ای که اشکال دیده میشه باید کار کنیم، وگرنه بعضی از تغییرات هر چقدر هم جزئی باشند بازهم در کابرد برنامه میتونند تاثیر بزارند.
همین پروژه را زیپ کنید بفرستید.

اَرژنگ
پنج شنبه 16 اردیبهشت 1389, 05:46 صبح
اگر با سایز آپلود این سایت مشکل دارید، میتونید به arjang8000@gmail.com ایمیلش کنید،

r_khan
پنج شنبه 16 اردیبهشت 1389, 13:17 عصر
برنامه با backup بانک را گذاشتم(اسم بانک= worldcup)در منوی marhale/mogagam وقتی کلیک ثبت را فشار میدهیم این اخطار را میدهد

اَرژنگ
شنبه 18 اردیبهشت 1389, 07:35 صبح
من هنوز منتظرم :چشمک:

داتابیسی را که فرستاید نمیتونم اتصال بدم،
فقط فایل mdf را بفرستید.
لطفاً یک نگاه به مثال دیگری که لینکش را فرستادم بندازید، اگر از همان روش مثال استفاده کنید راحت میتونم کمک کنم.

r_khan
شنبه 18 اردیبهشت 1389, 07:57 صبح
لطفاً یک نگاه به مثال دیگری که لینکش را فرستادم بندازید، اگر از همان روش مثال استفاده کنید راحت میتونم کمک کنم.

ممنون از کمک شما
من سعی میکنم باتوجه به مثال شما بقیه قسمت های برنامم را درست کنم شاید به گفته شما از شلوغ نوشتن کدهای من باشه اگر مشکلم حل نشد از همین پست مشکلم را میگم