PDA

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



mojsa2000
دوشنبه 29 اسفند 1390, 16:53 عصر
با سلام
من میخوام n ( عددی متغیر در هر بار اجرا ) عدد جدول را بر اساس تعداد نامهای موجود در دیتابیس ایجاد کنم.اما نتونستم. من با C#‎‎2010 و SQLserver2088 کار میکنم.
string create_tables_cmd = "Declare @SQL VarChar(1000)" +
"SELECT @SQL = 'Create Table ' + @mostaar + '(shift1 nvarchar(50),shift2 nvarchar(50),shift3 nvarchar(50),shift4 nvarchar(50),shift5 nvarchar(50),shift6 nvarchar(50),shift7 nvarchar(50),shift8 nvarchar(50))'" +
"exec (@SQL)";


string connection_str = "Data Source=MOHA2012-PC;Initial Catalog="+ filename +";Integrated Security=True";

SqlConnection connect = new SqlConnection(connection_str);
cmd = new SqlCommand(create_tables_cmd, connect) { CommandType = CommandType.Text };
cmd.Parameters.AddWithValue("@mostaar", names);

مشکل من اینجاست که چون فقط میخوام یک پارامتر را در sql داشته باشم و هر بار یک مقدار به اون متغیر بدم و جدول رو ایجاد کنم.اما با روشهایی مانند حلقه for یا foreach جواب نگرفتم.مثلا:
foreach (string name in member_table_name)
{

connect.Open();
names = name;
cmd.ExecuteNonQuery();
connect.Close();

}
دوستان ممنون میشم اگر راهنماییم کنید.

omid_csh
سه شنبه 01 فروردین 1391, 01:37 صبح
سلام

con.Open();

foreach (string name in member_table_name)
{
names = name;
create_tables_cmd = "Declare @SQL VarChar(1000)" +
" SELECT @SQL = 'Create Table " + names + " (shift1 nvarchar(50),shift2 nvarchar(50),shift3 nvarchar(50),shift4 nvarchar(50),shift5 nvarchar(50),shift6 nvarchar(50),shift7 nvarchar(50),shift8 nvarchar(50))'" +
" exec (@SQL)";

cmd = new SqlCommand(create_tables_cmd, con) { CommandType = CommandType.Text };

cmd.ExecuteNonQuery();
}
con.Close();

موفق باشی

mojsa2000
پنج شنبه 03 فروردین 1391, 19:01 عصر
ضمن تبریک سال نو به همه دوستان عزیز
من هنوز مشکلم پابرجاست..چون با این روش هم مقدار متغیر برای ساخت جدول حل نمیشه.
در واقع اگه بخوام واضح تر بگم من یک جدولی توی دیتا بیس دارم که توش تعدادی اسم مستعار افراد هست. من این اسمها رو درون یک جدول ( یا آرایه ) می ریزم و بعد میخوام برای هر اسم یک جدول جداگانه در دیتابیس ایجاد کنم. نمیدونم چرا اولین اسم رو که میگیره دیگه تغییرش نمیده و همش میخواد با همون اولین اسم گرفته شده عملیات ساخت جدول رو ادامه بده.
ممنون

mojsa2000
شنبه 05 فروردین 1391, 05:36 صبح
با سلام مجدد..
مشکل من حل شد. این مشکل بر میگرده به خاصیت addwithvalue توی parameters. چون هر دفعه که مقدار جدید به پارمتر اضافه میشه ، مقدار قبلی هم حفظ میشه و ایجاد خطا میکنه.بنابراین در هر بار اجرا باید به شکل زیر دستور تصحیح بشه:
for (int j = 0; j < counter ; j++)
{
cmd.Parameters.Clear();
string nick = "[" + name_table.Rows[j][1].ToString() + "]";
cmd.Parameters.AddWithValue("@mostaar", nick);
connect.Open();
try
{
cmd.ExecuteNonQuery();
MessageBox.Show("جداول افراد ساخته شد");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
MessageBox.Show("برنامه قادر به ساخت جداول نمیباشد ");
}
connect.Close();


}

mojsa2000
شنبه 05 فروردین 1391, 05:39 صبح
با سلام مجدد..
مشکل من حل شد. این مشکل بر میگرده به خاصیت addwithvalue توی parameters. چون هر دفعه که مقدار جدید به پارمتر اضافه میشه ، مقدار قبلی هم حفظ میشه و ایجاد خطا میکنه.بنابراین در هر بار اجرا باید به شکل زیر دستور تصحیح بشه:

for (int j = 0; j < counter ; j++)
{
cmd.Parameters.Clear();
string nick = "[" + name_table.Rows[j][1].ToString() + "]";
cmd.Parameters.AddWithValue("@mostaar", nick);
connect.Open();
try
{
cmd.ExecuteNonQuery();
MessageBox.Show("جداول افراد ساخته شد");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
MessageBox.Show("برنامه قادر به ساخت جداول نمیباشد ");
}
connect.Close();


}




در واقع در هر بار فراخوانی باید متد parameters.clear() فراخوانی بشه..
با تشکر