الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

نقل بين جدولين

بدأه man2011 في 21 يناير 2011 · 12 رد · 911 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

لدي فورم فيه ليبل وبتن فقط

ولدي جدولين Emp1 Emp2

لكي انقل البيانات من الاول الى الثاني كتبت اللوب التالي

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

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

        private void button1_Click(object sender, EventArgs e)
        {
            SqlConnection cn=new SqlConnection ("server=.;uid=sa;pwd=123;database=HRM");
            SqlDataAdapter da=new SqlDataAdapter("select * from Emp1",cn);
            DataSet ds = new DataSet();
            da.Fill(ds, "Emp1");
            cn.Open();
            for (int i = 0; i < ds.Tables["Emp1"].Rows.Count; i++)
           {

                SqlCommand cm = new SqlCommand("insert into Emp2 values(@NO,@name,@Gender)", cn);
                cm.Parameters.Add("@No", ds.Tables["Emp1"].Rows["No"]);
                cm.Parameters.Add("@Name", ds.Tables["Emp1"].Rows["Name"]);
                cm.Parameters.Add("@Gender", ds.Tables["Emp1"].Rows["Gender"]);
                cm.ExecuteNonQuery();
                label1.Text = ds.Tables[0].Rows[0].ToString();
            }
            cn.Close();


        }
    }
}

المطلوب عدم تكرار البيانات يعني لو ضغط على الزر مرة اخرى وكان في بيانات موجوده لازم ما تنكتب

المقارنه على الخانه الاولة في الجدول NO

المثال في الملحاقات

منتظر ردكم

Man2011.zip

#2

السلام عليكم

1- في البداية يجب أن تجعل الحقل NO حقل أساسي حتى تضمن عمد التكرار .

2- وضع سطر الاضافة بجملة Try كالتالي :

try
                {
                    cm.ExecuteNonQuery();
                }
                catch
                {

                }

3- وضع السطر :

SqlCommand cm = new SqlCommand("insert into Emp2 values(@NO,@name,@Gender)", cn);

داخل حلقة التكرار يعني انشاء كائنات بعدد دوران الحلقة وهذا غير جيد لأداء البرنامج .

لذلك يجب أن يكون انشاء الكائن خارج حلقة التكرار وداخل حلقة التكرار تقوم بتغيير عبارة الاستعلام فقط كما في المثال التالي :

cm.CommandText = "insert into Emp2 values(@NO,@name,@Gender)";

تحياتي

#3

السلام عليكم و رحمة الله و بركاته ،،

لماذا لا تنقل البيانات داخل قاعده البيانات، جلب البيانات الي البرنامج ثم اعادتها الي قاعده البيانات امر غير لازم هناّّّ!!

كان بامكانك ان ترسل جمله SQL تقوم باللازم

SELECT Column1, Column2, Column3,
INTO Table2
FROM Table1

هنا ايضا بامكانك التأكد من ان البيانات غير موجوده بوضع شرط في where

دمتم بود

سبحان الله وبحمده *** سبحان الله العظيم

www.quraany.com

www.arabcs.com

#4

hfsh80

XR.7

مشكورين على الرد ... بس برضه ما رديت بالمطلوب لي

انا اريد التعديل بس على الكود

اضايف لوب لمنع التكرار

عارف انه ممكن اجعله لا يتكرر في ال sql

وبرضه العباره للاخ XR.7

بس انا اريد اضافه للكود وهو اضافة لوب ثاني ياخد القيمة من الداتا سيت ويتاكد من عدم تكرارها وبعد كده ينفذ باقي الكود

ممكن؟؟؟

#5
man2011 كتب:

hfsh80

XR.7

مشكورين على الرد ... بس برضه ما رديت بالمطلوب لي

انا اريد التعديل بس على الكود

اضايف لوب لمنع التكرار

عارف انه ممكن اجعله لا يتكرر في ال sql

وبرضه العباره للاخ XR.7

بس انا اريد اضافه للكود وهو اضافة لوب ثاني ياخد القيمة من الداتا سيت ويتاكد من عدم تكرارها وبعد كده ينفذ باقي الكود

ممكن؟؟؟

مرحبا بك اخي، استغرب منك ان تكون تعرف ولا تعرف كيف تتاكد من عدم وجود البيانات مسبقا في الجدول؟!!

عموما استخدم count(*) لكي تتأكد من عدم وجود ريكورد بنفس القيم التي تريد ادخالها

دمتم بود

سبحان الله وبحمده *** سبحان الله العظيم

www.quraany.com

www.arabcs.com

#6
XR.7 كتب:

السلام عليكم و رحمة الله و بركاته ،،

لماذا لا تنقل البيانات داخل قاعده البيانات، جلب البيانات الي البرنامج ثم اعادتها الي قاعده البيانات امر غير لازم هناّّّ!!

كان بامكانك ان ترسل جمله SQL تقوم باللازم

SELECT Column1, Column2, Column3,
INTO Table2
FROM Table1

هنا ايضا بامكانك التأكد من ان البيانات غير موجوده بوضع شرط في where

دمتم بود

ممكن مثال بسيط او شرح

لاني حاولت ولكن لمن استنتج كيف يمكن وضع شرط الـ where هل ايضاً يحتاج للوب ؟

#7
عبد الله ساعاتي كتب:

ممكن مثال بسيط او شرح

لاني حاولت ولكن لمن استنتج كيف يمكن وضع شرط الـ where هل ايضاً يحتاج للوب ؟

السلام عليكم اخي عبدالله بن ساعاتي (العربي يذكر كلمه بن قبل اسم ابيه و الا كيف يفرق بين أسماء خارجة و أسماء بنت خارجه) :) المنطق ليس فقط في البرمجة ;)

SELECT NAME,MOBILE,ADDRESS
INTO OLD_CUSTOMERS_STAR1
FROM CUSTOMERS
WHERE 
MOBILE NOT IN (SELECT MOBILE FROM OLD_CUSTOMERS_STAR1)

هذا مجرد مثال على السريع :)

دمتم بود

1

سبحان الله وبحمده *** سبحان الله العظيم

www.quraany.com

www.arabcs.com

#8
XR.7 كتب:

السلام عليكم اخي عبدالله بن ساعاتي (العربي يذكر كلمه بن قبل اسم ابيه و الا كيف يفرق بين أسماء خارجة و أسماء بنت خارجه) :) المنطق ليس فقط في البرمجة ;)

SELECT NAME,MOBILE,ADDRESS
INTO OLD_CUSTOMERS_STAR1
FROM CUSTOMERS
WHERE 
MOBILE NOT IN (SELECT MOBILE FROM OLD_CUSTOMERS_STAR1)

هذا مجرد مثال على السريع :)

دمتم بود

على ما اعتقد لا يضعون بن قبل اللقب :happy:

سيدي انا قمت بمحاولة بدون شطر الوير لاتاكد من ان العملية تتم واذا تمت بضع شرط where واخبرك

ولكن الان يعطيني خطء اثناء عمل البرنامج عند cmd.ExecuteNonQuery(); وهوا كتالي There is already an object named 'Emp1' in the database

اقتباس

string s = "Data Source=SP00;Initial Catalog=HTData_V70;Persist Security Info=True;User ID=SA;Password=12345";

string sql = "SELECT NO,name,Gender INTO Emp2 FROM Emp1 ";

SqlConnection conn = new SqlConnection();

SqlCommand cmd = new SqlCommand();

conn.ConnectionString = s;

conn.Open();

cmd.Connection = conn;

cmd.CommandText = sql;

cmd.ExecuteNonQuery();

MessageBox.Show("iT'S oKI ");

يزول الخطأ عند ما يكون اسم الجدول غير موجود في الداتا بيز

ولكن لا يقوم بأنشاء جدول .! هل من المفترض ان يقوم بنشأ جدول من تلقاء نفسه؟

تم تعديل هذه المشاركة بواسطة عبد الله ساعاتي في 25 يناير 2011 في 16:28

#9

السلام عليكم،،

جزاك الله خير على المحاولة

في نقطة مهمه حصل فيها لبس عندي فانا لم اجرب الكود مسبقا

لانشاء جدول جديد يحتوي على الداتا استخدم الكود السابق

اما لادخال البيانات في جدول موجود فعلا فتستخدم جملة

INSERT INTO EMP2(COL1,COL2, COL3...)
SELECT COL1, COL2, COL3...
FROM EMP1
WHERE ...

جرب هذا و ان شاء الله كل شي تمام

دمتم بود

سبحان الله وبحمده *** سبحان الله العظيم

www.quraany.com

www.arabcs.com

#10
XR.7 كتب:

السلام عليكم،،

جزاك الله خير على المحاولة

في نقطة مهمه حصل فيها لبس عندي فانا لم اجرب الكود مسبقا

لانشاء جدول جديد يحتوي على الداتا استخدم الكود السابق

اما لادخال البيانات في جدول موجود فعلا فتستخدم جملة

INSERT INTO EMP2(COL1,COL2, COL3...)
SELECT COL1, COL2, COL3...
FROM EMP1
WHERE ...

جرب هذا و ان شاء الله كل شي تمام

دمتم بود

الله يعيطك العافية جلمة الاستعلام شغاله 100%

طيب لو اختلفت قاعدة البيانات ؟ انا عندي قاعدة بيانات Excel والثانية sql server

انا اتيت بالبيانات من الاكسل ووضعتها في داتا جريد

private void btn_GetExcel_Click(object sender, EventArgs e)

{

try

{

btn_GetExcel.Enabled = false;

button1.Enabled = false;

OleDbConnection MyConnection = new OleDbConnection();

DataSet DtSet = new DataSet();

OleDbDataAdapter MyCommand = new OleDbDataAdapter();

MyConnection = new OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0;Data Source='C:\\sahb.xls';Extended Properties=Excel 8.0;");

MyCommand = new OleDbDataAdapter("select itmNo, F7 , itmDfPerc, itmInitCost, itmADescr, itmPrice1, F21 from [ItemTb$] Where itmNo >'0'", MyConnection);

MyCommand.TableMappings.Add("Table", "TestTable");

DtSet = new DataSet();

MyCommand.Fill(DtSet);

dataGridView2.DataSource = DtSet.Tables[0];

//dataGridView1.Columns(0).ReadOnly = true;

MyConnection.Close();

btn_GetExcel.Enabled = true;

button1.Enabled = true;

}

ومن ثم اصدرها الى sql

string sql = " INSERT INTO Emp2 (NO, name , Gender) Values( '" + dataGridView2.CurrentRow.Cells[0].Value.ToString() + "','" + dataGridView2.CurrentRow.Cells[1].Value.ToString() + "' ,'" + dataGridView2.CurrentRow.Cells[2].Value.ToString() + "')Select NO FROM Emp2 WHERE NO NOT IN (SELECT NO FROM Emp2 )";

ولكن هذا يضيف السطر الحالي فقط ايضاً لا يمكن وضع where

هل من نصائح او طرق اخرا ؟؟

مع العلم من ان قاعدة بيانات اكسل تحتوي على ما يقارب 11الف ريكورد وتصدر بشكل يومي الى جدوولين في sql

تم تعديل هذه المشاركة بواسطة عبد الله ساعاتي في 26 يناير 2011 في 16:36

#11

ويعمل عليها Insert و update و Delete

#12

اذا كانت البيانات في Excel او اي وسيط اخر غير ال SQL Server

بإمكانك عمل التالي:

1- ادخل البيانات في ال SQL Server في جدول مؤقت Temporary Table

2- اعمل التعديل المطلوب على البيانات قبل كل شيء

3- انقل البيانات الي الجداول التي ترغب فيها باستخدام ال Query السابق

طبعا هناك خصائص في ال Excel انك تستطيع عمل Export للبيانات الي قاعدة البيانات بدون الحاجه لبرنامج معين

سبحان الله وبحمده *** سبحان الله العظيم

www.quraany.com

www.arabcs.com

#13

انا عملت المراد عن طريق هذه الكود ولكن بصراحه غير عملي ويعلق احياناً البرنامج داخل الفور لوب لن dataset تحتوي على 11الف سطر

وايضاً هذا كود لبرنامج تجربي والذي اريد العمل عليه اكبر من هذا بكثير احتاج ان اقوم بعملية insert and update على جدولي في sql وبشروط معينة يعني اتوقع هذا الكود غير فعال

private void btn_SendToSql_Click(object sender, EventArgs e)
    	{
        	btn_GetExcel.Enabled = false;
        	btn_SendToSql.Enabled = false;

        	SqlConnection cn = new SqlConnection("Data Source=SP00;Initial Catalog=HTData_V70;Persist Security Info=True;User ID=SA;Password=12345");
        	cn.Open();

        	progressBar1.Maximum = DtSet.Tables[0].Rows.Count;

        	int lablNum = 0;
        	int labNmUp = 0;
        	int labNmIns = 0;

        	int xwhile = DtSet.Tables[0].Rows.Count;
        	//int i = 0;
        	//while (i < xwhile)
        	for (int i = 0; i < DtSet.Tables[0].Rows.Count; i++)
        	{
            	string sql = " Select NO From Emp2 where NO='" + DtSet.Tables[0].Rows["itmNo"].ToString() + "'";
            	SqlDataAdapter da = new SqlDataAdapter(sql, cn);
            	DataSet ds = new DataSet();
            	da.Fill(ds);
            	DataTable dt = ds.Tables[0];

            	if (dt != null && dt.Rows.Count != 0)
            	{
                	SqlCommand cmUp = new SqlCommand("UpDate Emp2 SET  name=@name, Gender=@Gender WHERE NO=@NO", cn);
                	cmUp.Parameters.AddWithValue("@NO", DtSet.Tables[0].Rows["itmNo"]);
                	cmUp.Parameters.AddWithValue("@name", DtSet.Tables[0].Rows["F7"]);
                	cmUp.Parameters.AddWithValue("@Gender", DtSet.Tables[0].Rows["itmInitCost"]);
                	cmUp.ExecuteNonQuery();
                	label_haping.Text = "UpDate...";
                	label_NmUpdate.Text = Convert.ToString(++labNmUp);
            	}

            	else
            	{
                	SqlCommand cm = new SqlCommand("insert into Emp2 values(@NO,@name,@Gender)", cn);
                	cm.Parameters.AddWithValue("@NO", DtSet.Tables[0].Rows["itmNo"]);
                	cm.Parameters.AddWithValue("@name", DtSet.Tables[0].Rows["F7"]);
                	cm.Parameters.AddWithValue("@Gender", DtSet.Tables[0].Rows["itmInitCost"]);
                	cm.ExecuteNonQuery();
                	label_haping.Text = "Insert...";
                	label_NmInsert.Text = Convert.ToString(++labNmIns);
            	}

            	label_SumRow.Text = Convert.ToString(++lablNum);
            	progressBar1.Value = Convert.ToInt32(i);

            	//i++;
        	}
        	cn.Close();
        	btn_GetExcel.Enabled = true;
        	btn_SendToSql.Enabled = true;

    	}

XR.7 كتب:

اذا كانت البيانات في Excel او اي وسيط اخر غير ال SQL Server

بإمكانك عمل التالي:

1- ادخل البيانات في ال SQL Server في جدول مؤقت Temporary Table

2- اعمل التعديل المطلوب على البيانات قبل كل شيء

3- انقل البيانات الي الجداول التي ترغب فيها باستخدام ال Query السابق

طبعا هناك خصائص في ال Excel انك تستطيع عمل Export للبيانات الي قاعدة البيانات بدون الحاجه لبرنامج معين

ماهي Temporary Talbe ؟ سوف ابحث عنها

ولم افهم ماذا تقصد بعمل التعديلات المطلوبة قبل

اما بنسبة لاداة Export اسخدتمها ولكن مشكالها كثير معايا وايضاً هيا تستخدم لجلب البيانات لمره واحده

انا عندي المستخدم يدخل الاصناف بشكل يومي ويعدل عليها (insert and update) داخل ملف اكسل ومن ثم اخر الفترة تصدر الى sql لتستخدم هذه البيانات مع البرنامج

يعني شاشة ادخال الاصناف (هيا الاكسل)

وعاجبني اسلوب تفكيرك فراح اتعبك معايا happy.gif

لكم جزيل الشكر

الاخman2011

الكود الي في الرد على طلبك + التحديث وانصحك بأستخدام طريقة الاستاذ XR.7 فهي اسهل

مواضيع مشابهة