PDA

View Full Version : خواندن اطلاعات ردیف ردیف به وسیله حلقه و insert آن در جدول دیگر



reza11_2005
پنج شنبه 08 مهر 1395, 11:41 صبح
با سلام
من یک سوال دارم
من می خواهم که اطلاعات ردیف به ردیف از دیتابیس بخونم
بعد ردیف به ردیف وارد جدول دوم کنم یعنی insert کنم
ممنون می شوم یک نمونه کد از این مورد برای من قرار دهید
جدول اول :


نام

مبلغ



رضا

200



حسن

20




جدول دوم :


نام

استان

شهر

مبلغ

Masoomeh.H
پنج شنبه 08 مهر 1395, 12:34 عصر
با سلام
من یک سوال دارم
من می خواهم که اطلاعات ردیف به ردیف از دیتابیس بخونم
بعد ردیف به ردیف وارد جدول دوم کنم یعنی insert کنم
ممنون می شوم یک نمونه کد از این مورد برای من قرار دهید
جدول اول :


نام
مبلغ


رضا
200


حسن
20



جدول دوم :


نام
استان
شهر
مبلغ
















سلام
واسه این کار بهتره اول تمام اطلاعاتی رو که لازم دارید رو یکبار از دیتابیس بخونید و توی دیتاتیبل بریزید بعد با یه حلقه foreach(Daterow dr in datatable1.Rows) اطلاعات رو سطر به سطر به دیتاگریدویو اظافه کنید

reza11_2005
پنج شنبه 08 مهر 1395, 12:51 عصر
میشه یک نمونه کد قرار دهید
ممنون می شوم

Mahmoud.Afrad
پنج شنبه 08 مهر 1395, 13:05 عصر
ساختار جداول دیتابیس رو مشخص کنید. و دلیل این کاری که می خواهید انجام بدید رو هم بیان کنید.

به نظر من کپی رکوردها از جدول به جدول معنی نداره و منطقی نیست.

reza11_2005
پنج شنبه 08 مهر 1395, 13:12 عصر
سلام
ساختار ساده است
جدول اول :


ردیف

نام و نام خانوادگی

مقصد

مبلغ



1

علی محمدی

اصفهان

10000



2

رضا جعفری

تهران

20000




جدول دوم مثل همینه
که من براش یک تابع نوشتم که insert می کنند
هدف انجام یک سری کار روی اطلاعات است که باید در جدول دوم انجام شود
ممنون می شود کلی زحمت کشیدام داخل این مرحله گیر افتادم

kamiloted
پنج شنبه 08 مهر 1395, 14:43 عصر
سلام
ساختار ساده است
جدول اول :


ردیف
نام و نام خانوادگی
مقصد
مبلغ


1
علی محمدی
اصفهان
10000


2
رضا جعفری
تهران
20000



جدول دوم مثل همینه
که من براش یک تابع نوشتم که insert می کنند
هدف انجام یک سری کار روی اطلاعات است که باید در جدول دوم انجام شود
ممنون می شود کلی زحمت کشیدام داخل این مرحله گیر افتادم

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

daniyaltjm
پنج شنبه 08 مهر 1395, 14:48 عصر
همینطور که دوستان گفتن راه خوبی نیست ولی اگه اصرار دارین که این کار رو انجام بدین با کد زیر میشه:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace copyTB
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
GetTB1();
GetTB2();


}



public void GetTB1()
{
SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=test;Integrated Security=True");
SqlDataAdapter da = new SqlDataAdapter(null, con);
da.SelectCommand.CommandText = "select Name,Amount from TB1";
DataTable dt = new DataTable();
da.Fill(dt);
dataGridView1.DataSource = dt;
dataGridView1.Columns[0].HeaderText = "نام";
dataGridView1.Columns[1].HeaderText = "مبلغ";
}

public void GetTB2()
{
SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=test;Integrated Security=True");
SqlDataAdapter da = new SqlDataAdapter(null, con);
da.SelectCommand.CommandText = "select Name,State,City,Amount from TB2";
DataTable dt = new DataTable();
da.Fill(dt);
dataGridView2.DataSource = dt;
dataGridView2.Columns[0].HeaderText = "نام";
dataGridView2.Columns[1].HeaderText = "استان";
dataGridView2.Columns[2].HeaderText = "شهر";
dataGridView2.Columns[3].HeaderText = "مبلغ";
}

private void button1_Click(object sender, EventArgs e)
{
try
{
SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=test;Integrated Security=True");
SqlCommand cm = new SqlCommand();
con.Open();
cm.Connection = con;

for (int i = 0; i < dataGridView1.RowCount; i++)
{
cm.CommandText = "insert into TB2(Name,Amount) values(@N,@A)";
cm.Parameters.AddWithValue("@N", dataGridView1.Rows[i].Cells[0].Value.ToString());
cm.Parameters.Add("@A", SqlDbType.Money).Value = dataGridView1.Rows[i].Cells[1].Value.ToString();
cm.ExecuteNonQuery();
cm.Parameters.Clear();

}

con.Close();

}
catch
{
}
GetTB2();
}

}
}

reza11_2005
پنج شنبه 08 مهر 1395, 22:00 عصر
سلام
میشه از dataGridView
استفادع نکرد

daniyaltjm
پنج شنبه 08 مهر 1395, 23:19 عصر
سلام
میشه از dataGridView
استفادع نکرد

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

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace copyTB
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
GetTB1();
GetTB2();


}



public void GetTB1()
{
SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=test;Integrated Security=True");
SqlDataAdapter da = new SqlDataAdapter(null, con);
da.SelectCommand.CommandText = "select Name,Amount from TB1";
DataTable dt = new DataTable();
da.Fill(dt);
dataGridView1.DataSource = dt;
dataGridView1.Columns[0].HeaderText = "نام";
dataGridView1.Columns[1].HeaderText = "مبلغ";
}

public void GetTB2()
{
SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=test;Integrated Security=True");
SqlDataAdapter da = new SqlDataAdapter(null, con);
da.SelectCommand.CommandText = "select Name,State,City,Amount from TB2";
DataTable dt = new DataTable();
da.Fill(dt);
dataGridView2.DataSource = dt;
dataGridView2.Columns[0].HeaderText = "نام";
dataGridView2.Columns[1].HeaderText = "استان";
dataGridView2.Columns[2].HeaderText = "شهر";
dataGridView2.Columns[3].HeaderText = "مبلغ";
}

private void button1_Click(object sender, EventArgs e)
{
try
{
SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=test;Integrated Security=True");
SqlCommand cm = new SqlCommand();
SqlDataAdapter da = new SqlDataAdapter("select Name,Amount from TB1", con);
DataTable dt = new DataTable();
da.Fill(dt);
con.Open();
cm.Connection = con;
for (int i = 0; i < dt.Rows.Count; i++)
{
cm.CommandText = "insert into TB2(Name,Amount) values(@N,@A)";
cm.Parameters.AddWithValue("@N", dt.Rows[i][0].ToString());
cm.Parameters.Add("@A", SqlDbType.Money).Value = dt.Rows[i][1].ToString();
cm.ExecuteNonQuery();
cm.Parameters.Clear();

}

con.Close();
GetTB2();
}
catch
{
}

}

}
}

reza11_2005
جمعه 09 مهر 1395, 10:04 صبح
با سلام و تشکر
من هر کاری می کنم فقط ردیف اول تکراری تا اخرش insert می کنند

reza11_2005
جمعه 09 مهر 1395, 10:05 صبح
من الان می خواهم اطلاعات از sql داخل به اکسس insert کنم
باز با همین مشکل که تکرار ردیف اول بر می خورم

kamiloted
جمعه 09 مهر 1395, 10:47 صبح
پارامتر رو clear کردی.اون رو بردار.(تو حلقه for)

reza11_2005
جمعه 09 مهر 1395, 11:21 صبح
سلام من اسفاده نکردام

mr.sirwan
جمعه 09 مهر 1395, 11:35 صبح
سلام من اسفاده نکردام

دوست عزیز همونطور که گفته شد، ساختار دو تا جدول و کدی که شما استفاده میکنین رو بذارین، اینجوری به هیچ جوابی نمیرسین

reza11_2005
جمعه 09 مهر 1395, 12:04 عصر
سلام
یک کلاس جهت insert کردن:
public int ExecuteNoneQueryAccess(string C_Text, OleDbParameter[] C_Parameters)
{

//کانکشن
OleDbCom.Connection = OleDbCon;
//نوع Sp

OleDbCom.CommandText = C_Text;
OleDbCom.Parameters.AddRange(C_Parameters);
try
{
OleDbCon.Open();
int R_Value = OleDbCom.ExecuteNonQuery();
OleDbCon.Close();
return R_Value;

}
catch (Exception)
{

throw;
}
}

این هم :
public int InsertForoush(
string Name ,string LastNameSherkatName
)
{
if (Con != null)
{
result_Foroush = Con.ExecuteNoneQueryAccess(
"INSERT INTO Foroush (KharidarName,KharidarLastNameSherkatName)"
+"values (@Name ,@LastNameSherkatName)", new OleDbParameter[]
{
new OleDbParameter("@Name", Name),
new OleDbParameter("@LastNameSherkatName", LastNameSherkatName),
});
Con = null; // خالی کردن حافظه

}
return result_Foroush;
}

و این هم حلقه
for (int i = 0; i < DT.Rows.Count; i++)
{
Insert_Foroush(Convert.ToInt32(DT.Rows[i][1]), Convert.ToInt32(DT.Rows[i][2]),
);


}

reza11_2005
جمعه 09 مهر 1395, 12:07 عصر
اولین کد جهت ارتباط با دیتابیس
دومی نحوه گرفتن وروی
سومی که مشخص
من تست کردام همه چیز درست فقط موقع درج فقط ردیف 1 به تعداد مورد نظر درج می کنند

mr.sirwan
جمعه 09 مهر 1395, 12:18 عصر
سلام
یک کلاس جهت insert کردن:
public int ExecuteNoneQueryAccess(string C_Text, OleDbParameter[] C_Parameters)
{

//کانکشن
OleDbCom.Connection = OleDbCon;
//نوع Sp

OleDbCom.CommandText = C_Text;
OleDbCom.Parameters.AddRange(C_Parameters);
try
{
OleDbCon.Open();
int R_Value = OleDbCom.ExecuteNonQuery();
OleDbCon.Close();
return R_Value;

}
catch (Exception)
{

throw;
}
}

این هم :
public int InsertForoush(
string Name ,string LastNameSherkatName
)
{
if (Con != null)
{
result_Foroush = Con.ExecuteNoneQueryAccess(
"INSERT INTO Foroush (KharidarName,KharidarLastNameSherkatName)"
+"values (@Name ,@LastNameSherkatName)", new OleDbParameter[]
{
new OleDbParameter("@Name", Name),
new OleDbParameter("@LastNameSherkatName", LastNameSherkatName),
});
Con = null; // خالی کردن حافظه

}
return result_Foroush;
}

و این هم حلقه
for (int i = 0; i < DT.Rows.Count; i++)
{
Insert_Foroush(Convert.ToInt32(DT.Rows[i][1]), Convert.ToInt32(DT.Rows[i][2]),
);


}


داخل حلقه For چرا اومدین مقادیر دیتاتیبل رو تبدیل به int کردین، در حالی که متد insertforush پارامتر های string قبول میکنه؟
کدایی که گذاشتین ظاهرا درسته، مونده اون اصل کاری یعنی اطلاعاتی که از دیتابیس خوندین و گذاشتین داخل DataTable
کد مربوط به این بخش هم بذارین

و در ضمن توصیه میکنم با نحوه trace کردن برنامه هم آشنا بشین

reza11_2005
جمعه 09 مهر 1395, 12:28 عصر
چشم گرفتن اطلاعات دیتا تیبل:
public DataTable SelectItemForoush(string F, string T)
{
if (Con != null)
{
result_SelectItemForoush = Con.ExecuteDataTable(System.Data.CommandType.Store dProcedure, "SelectItemForoush", new SqlParameter[]
{
new SqlParameter("@From", F),
new SqlParameter("@To", T),
});
}
Con = null;
return result_SelectItemForoush;
}

reza11_2005
جمعه 09 مهر 1395, 12:32 عصر
داخل حلقه For چرا اومدین مقادیر دیتاتیبل رو تبدیل به int کردین، در حالی که متد insertforush پارامتر های string قبول میکنه؟
کدایی که گذاشتین ظاهرا درسته، مونده اون اصل کاری یعنی اطلاعاتی که از دیتابیس خوندین و گذاشتین داخل DataTable
کد مربوط به این بخش هم بذارین

و در ضمن توصیه میکنم با نحوه trace کردن برنامه هم آشنا بشین

چون اخطار می داد می گفت باید تبدیل صورت بگیره من هم این کار انجام دادام

daniyaltjm
جمعه 09 مهر 1395, 12:49 عصر
با سلام و تشکر
من هر کاری می کنم فقط ردیف اول تکراری تا اخرش insert می کنند

من نمی دونم شما چکار کردی:متفکر: ولی کدی که نوشتم یک جدول رو کپی میکنه و مشکلی هم نداره! این هم برنامش:

دانلود (http://s8.picofile.com/file/8269134992/copyTB.rar.html)

reza11_2005
جمعه 09 مهر 1395, 13:15 عصر
چی بگم من خودم هم ماندام

mr.sirwan
جمعه 09 مهر 1395, 13:27 عصر
چون اخطار می داد می گفت باید تبدیل صورت بگیره من هم این کار انجام دادام
به جای تبدیل به int تبدیل به string کنین برای اینکار از متد ToString() بعد از DT.Rows[i][1] استفاده کنین



public DataTable SelectItemForoush(string F, string T)
{
if (Con != null)
{
result_SelectItemForoush = Con.ExecuteDataTable(System.Data.CommandType.Store dProcedure, "SelectItemForoush", new SqlParameter[]
{
new SqlParameter("@From", F),
new SqlParameter("@To", T),
});
}
Con = null;
return result_SelectItemForoush;
}





دوست عزیز شما اینجا داری چیکار میکنی؟؟؟!!!! :عصبانی++::متعجب: کاش یکم توضیح میدادی توو این کد قصد انجام چه کاری رو دارین، به هر حال شما از این کد برای واکشی اطلاعاتت استفاده کن:


Select * From YourTable


اما اگر قصد دارین که از طریق دستورات sql این کارو انجام بدین (اینطوری که من از این کد فهمیدم شما قصد همین کارو دارین)، خب یه استورپروسیجر بنویسین و تمام، این همه دردسر هم نمیخواد، دیگه نیازی به حلقه داخل سی شارپ هم نخواهد بود

Dani701
جمعه 09 مهر 1395, 13:52 عصر
با سلام
من یک سوال دارم
من می خواهم که اطلاعات ردیف به ردیف از دیتابیس بخونم
بعد ردیف به ردیف وارد جدول دوم کنم یعنی insert کنم
ممنون می شوم یک نمونه کد از این مورد برای من قرار دهید
جدول اول :


نام
مبلغ


رضا
200


حسن
20



جدول دوم :


نام
استان
شهر
مبلغ
















با سلام خدمت شما باید عرض کنم که شما میتونید با ساخت یک کوئری این کار رو به سادگی هر چه تمام تر انجام بدید اینم دستورات این کوئری:

INSERT INTO Jadval2 (نام,مبلغ)
VALUES (@Name,@Price)

عبارت Name@ یک پارامتر ایجاد میکند و Price@ هم پارامتر دوم را ایجاد میکند که شما میتونید در زمان استفاده از این تابع این پارامتر ها را پر کنید و در جدول دوم در ستون نام و مبلغ اضافه میشود
این نکته هم یگم که جای jadval2 نام جدول دومتون رو بنویسید
نحوه استفاده از این دستور(فرض کنید اسم تابع InsertQuery باشد و اسم TableAdapter جدول دوم ما TA باشد)

Private Void DataGridView1_CellDoubleClick(Object sender,DataGridViewCellEventArgs)
{
TA.InsertQuery(DataGridView1.CurrentRow.Cells[نام].Value.ToString();
}

داخل کروشه باید اسم ستون نام در جدول اول رو بنویسین

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

reza11_2005
جمعه 09 مهر 1395, 13:53 عصر
به جای تبدیل به int تبدیل به string کنین برای اینکار از متد ToString() بعد از DT.Rows[i][1] استفاده کنین





دوست عزیز شما اینجا داری چیکار میکنی؟؟؟!!!! :عصبانی++::متعجب: کاش یکم توضیح میدادی توو این کد قصد انجام چه کاری رو دارین، به هر حال شما از این کد برای واکشی اطلاعاتت استفاده کن:


Select * From YourTable


اما اگر قصد دارین که از طریق دستورات sql این کارو انجام بدین (اینطوری که من از این کد فهمیدم شما قصد همین کارو دارین)، خب یه استورپروسیجر بنویسین و تمام، این همه دردسر هم نمیخواد، دیگه نیازی به حلقه داخل سی شارپ هم نخواهد بود

اخه من می خواهم داخل دیتابیس اکسس insert کنم یعنی می شود؟

mrprestige
جمعه 09 مهر 1395, 14:43 عصر
عرض سلام و وقت بخیر دوست من ، طبق این پست شما (http://barnamenevis.org/showthread.php?530622-%D8%AE%D9%88%D8%A7%D9%86%D8%AF%D9%86-%D8%A7%D8%B7%D9%84%D8%A7%D8%B9%D8%A7%D8%AA-%D8%B1%D8%AF%DB%8C%D9%81-%D8%B1%D8%AF%DB%8C%D9%81-%D8%A8%D9%87-%D9%88%D8%B3%DB%8C%D9%84%D9%87-%D8%AD%D9%84%D9%82%D9%87-%D9%88-insert-%D8%A2%D9%86-%D8%AF%D8%B1-%D8%AC%D8%AF%D9%88%D9%84-%D8%AF%DB%8C%DA%AF%D8%B1&p=2343043&viewfull=1#post2343043) شما اگه می خواهید محتویات جدول SQL تون رو به Access و همینطور بالعکس انتقال بدید به این پست (http://barnamenevis.org/showthread.php?529484-%D8%AE%D8%B1%D9%88%D8%AC%DB%8C-Access-%D8%A8%D8%A7-%D8%B3%DB%8C-%D8%B4%D8%A7%D8%B1%D9%BE&p=2339915&viewfull=1#post2339915) سر بزنید (البته شما پیشتر هم همچین سوالی رو کرده بودید بنده به سوالتون توی همین پستی که گذاشتم پاسخ دادم ).

پیروز و موفق باشید .

reza11_2005
جمعه 09 مهر 1395, 15:54 عصر
سلام
وقت بخیر اقا برنامه من سه لالیه است

همه چیز درست فقط اگر در حلقه for تعداد ردیف های من 10 باشد میاد ردیف اول 10 بار داخل پایگاه داده اکسس insert می کند
مشکل من همین چرا تکرار می کنند
کد ها هم گذاشتم