একটি ডেটাটেবল থেকে অন্য ডেটাটেবেলে সারিগুলি অনুলিপি করুন?


165

আমি কীভাবে সি # তে ডেটাবেল থেকে অন্য ডাটাবেলে নির্দিষ্ট সারিগুলি অনুলিপি করতে পারি? একাধিক সারি থাকবে।

উত্তর:


257
foreach (DataRow dr in dataTable1.Rows) {
    if (/* some condition */)
        dataTable2.Rows.Add(dr.ItemArray);
}

উপরের উদাহরণটি ধরে নিয়েছে dataTable1এবং dataTable2কলামগুলির একই সংখ্যা, টাইপ এবং ক্রম রয়েছে।


22
"এই সারিটি ইতিমধ্যে অন্য টেবিলের অন্তর্ভুক্ত in" এর ফলাফল হবে না।
ম্যাকার্থে

15
@ এমসিআরহে না, এটি হবে না; বিদ্যমান সারিতে মানগুলি থেকে একটি নতুন সারি তৈরি করা হচ্ছে। সারিটি নিজেই অন্য ডেটাটেবেলে যুক্ত হচ্ছে না।
ব্র্যাডলি স্মিথ

20
@ দাউদআব্বাসী আপনি কেবলমাত্র ItemArrayমত প্রকাশের শেষে অংশটি ছেড়ে দিলে তা ঘটবে । নিশ্চিত করুন যে আপনি সারিটির মানগুলি যুক্ত করছেন, সারিটি নিজেই নয়।
ব্র্যাডলি স্মিথ

4
@DawoodAbbasi জন্য MSDN ডকুমেন্টেশন পড়ুন DataTable.Clone: পদ্ধতি msdn.microsoft.com/en-us/library/...
ব্র্যাডলি স্মিথ

10
যদিও আপনার উত্তরটি প্রযুক্তিগতভাবে সঠিক, আপনার কোড নমুনা আপনার অনুমানগুলিকে সম্বোধন করে না। @ রাগেশগ্রের উত্তরটি সমস্ত অনুমানকে পরিচালনা করে এবং আইএমএইচও আরও সংক্ষিপ্তভাবে লেখা এবং ত্রুটির প্রবণতা কম।
chris.nesbit1

94

সারণী থেকে অন্যটিতে নির্দিষ্ট সারিগুলি অনুলিপি করুন

// here dttablenew is a new Table  and dttableOld is table Which having the data 

dttableNew  = dttableOld.Clone();  

foreach (DataRow drtableOld in dttableOld.Rows)
{
   if (/*put some Condition */)
   {
      dtTableNew.ImportRow(drtableOld);
   }
}

আমদানির পরে যদি আমার আর ডিটিএবল ওল্ড ব্যবহারের প্রয়োজন না হয়, তবে আমার কি এখনও ক্লোন () ব্যবহার করা দরকার?
স্যাম

দুর্দান্ত এবং ব্যবহারিক! ধন্যবাদ!
মেয়ার স্পিজিটর

1
আপনার প্রশ্ন সম্পর্কিত @ স্যাম, ক্লোনটি টেবিলের কাঠামোটি অনুলিপি করতে হবে, যদি আপনার টেবিলটি ইতিমধ্যে একই ডেটা-টাইপ হয়, তবে আপনার এটির দরকার নেই।
মেয়ার স্পিৎজার

19

এটা চেষ্টা কর

    String matchString="ID0001"//assuming we have to find rows having key=ID0001
    DataTable dtTarget = new DataTable();
    dtTarget = dtSource.Clone();
    DataRow[] rowsToCopy;
    rowsToCopy = dtSource.Select("key='" + matchString + "'");
    foreach (DataRow temp in rowsToCopy)
    {
        dtTarget.ImportRow(temp);
    }

@ মনোজসাওয়ালিয়া, তাহলে বিকল্পটি কী যে পারফরম্যান্স ব্যয় করে না?
স্যাম

16

এটি পরীক্ষা করে দেখুন, আপনি এটি পছন্দ করতে পারেন (আগে, দয়া করে টেবিল 1 টেবিল 2 তে ক্লোন করুন):

table1.AsEnumerable().Take(recodCount).CopyToDataTable(table2,LoadOption.OverwriteChanges);

বা:

table1.AsEnumerable().Where ( yourcondition  ) .CopyToDataTable(table2,LoadOption.OverwriteChanges);

এটি আরও উন্নততর পদ্ধতির কারণ এটি পূর্ববর্তী লুপের বিপরীতে, স্পষ্টভাবে প্রতিটিটির মাধ্যমে পুনরাবৃত্তি না করে একটি ডেটাট্যাবল থেকে অন্যটিতে সারণি সীমা নির্বাচন করতে এমনকি পরিসীমা-অনুলিপি করতে এমনকি অভ্যন্তরীণ সক্ষমতা ব্যবহার করে।
ডেভিড বার্গ

15

সমর্থিত: 4, 3.5 এসপি 1, আপনি এখন অবজেক্টটিতে কেবল কোনও পদ্ধতিতে কল করতে পারেন।

DataTable dataTable2 = dataTable1.Copy()

2
প্রযুক্তিগতভাবে এটি ডেটাটেবলের একটি অনুলিপি তৈরি করে। যদিও এটি প্রশ্নে স্পষ্টভাবে বলা হয়নি, এটি সম্ভব যে ডেটা টেবিল 2 ইতিমধ্যে বিদ্যমান রয়েছে এবং এর মধ্যে অন্যান্য সারি রয়েছে যা আমরা হারাতে চাই না। এছাড়াও, প্রশ্নটিতে সুনির্দিষ্টভাবে "নির্দিষ্ট সারিগুলি" বলা হয়েছে, যেখানে এটি কেবল সমস্ত সারি পরিচালনা করে।
ম্যাট

5

অন্যান্য পোস্টের ফলস্বরূপ, আমি এটি পেতে সবচেয়ে স্বল্পতম:

DataTable destTable = sourceTable.Clone();
sourceTable.AsEnumerable().Where(row => /* condition */ ).ToList().ForEach(row => destTable.ImportRow(row));

যা মূলত ফোরচ। এছাড়াও, আপনি কোনও শর্তের মাধ্যমে ফিল্টার করছেন না, যেমন ওপি-র অনুরোধ।
এরিক উ

এখন আমি যদি পরিষ্কার করে দেই sourceTableতবে destTableতাও কি পরিষ্কার হবে?
Si8

আমি কোনও মান নির্ধারণ করতে এবং গন্তব্যটি পরিষ্কার না করেই মূল ভেরিয়েবলটি সাফ করতে চাই want
Si8

2

নীচে নমুনা হ'ল এক সারি অনুলিপি করার দ্রুততম উপায়। প্রতিটি ঘর কলামের নামের উপর ভিত্তি করে অনুলিপি করা হচ্ছে। যদি আপনার অনুলিপি করার জন্য নির্দিষ্ট কক্ষের প্রয়োজন না হয় তবে চেষ্টা করুন বা যুক্ত করুন add যদি আপনার 1 টির বেশি সারি অনুলিপি করতে চলেছে তবে নীচের কোডটি লুপ করুন।

DataRow dr = dataset1.Tables[0].NewRow();
for (int i = 0; i < dataset1.Tables[1].Columns.Count; i++)
{
    dr[dataset1.Tables[1].Columns[i].ColumnName] = dataset1.Tables[1].Rows[0][i];
}

datasetReport.Tables[0].Rows.Add(dr);

ডেটাসেট 1. টেবিল [1]। সারি [ 0 ] [i]; আপনার নির্দিষ্ট সারি সূচকে সূচক 0 পরিবর্তন করুন অথবা আপনি লুপে যাচ্ছেন বা যদি এটি লজিকাল হয় তবে আপনি একটি পরিবর্তনশীল ব্যবহার করতে পারেন


1
 private void CopyDataTable(DataTable table){
     // Create an object variable for the copy.
     DataTable copyDataTable;
     copyDataTable = table.Copy();
     // Insert code to work with the copy.
 }

আপনার কোডটি আমার পক্ষে নিখুঁতভাবে কাজ করে, একটি খুব সাধারণ কোড, ধন্যবাদ
Esraa_92

1

যারা এর জন্য সিঙ্গল কমান্ড এসকিউএল কোয়েরি চান তাদের জন্য:

INSERT INTO TABLE002 
(COL001_MEM_ID, COL002_MEM_NAME, COL002_MEM_ADD, COL002_CREATE_USER_C, COL002_CREATE_S)
SELECT COL001_MEM_ID, COL001_MEM_NAME, COL001_MEM_ADD, COL001_CREATE_USER_C, COL001_CREATE_S
FROM TABLE001;

এই প্রশ্নের সাথে থেকে তথ্য কপি হবে TABLE001থেকে TABLE002এবং আমরা অনুমান উভয় কলাম বিভিন্ন কলাম নামে ছিল।

কলামের নামগুলি এক-এক-তে ম্যাপ করা হয়:

COL001_MEM_ID -> COL001_MEM_ID

COL001_MEM_NAME -> COL002_MEM_NAME

COL001_MEM_ADD -> COL002_MEM_ADD

COL001_CREATE_USER_C -> COL002_CREATE_USER_C

COL002_CREATE_S -> COL002_CREATE_S

আপনার যদি কিছু শর্ত প্রয়োজন হয় তবে আপনি কোথায় ক্লজটি নির্দিষ্ট করতে পারেন।


0

পুরো ডেটাটেবলকে অনুলিপি করতে কেবল এটি করুন:

DataGridView sourceGrid = this.dataGridView1;
DataGridView targetGrid = this.dataGridView2;
targetGrid.DataSource = sourceGrid.DataSource;

2
কীভাবে কোনও ডেটা টেবিল থেকে সুনির্দিষ্ট সারিগুলি অনুলিপি করতে হবে তা নিয়ে প্রশ্নটি রয়েছে, পুরো জিনিসটি নয়।
jtate

0

আমি এই সমস্যাটি করার একটি সহজ উপায় তৈরি করেছি

 DataTable newTable = oldtable.Clone();    
 for (int i = 0; i < oldtable.Rows.Count; i++)
 {
   DataRow drNew = newTable.NewRow();    
   drNew.ItemArray = oldtable.Rows[i].ItemArray;    
   newTable.Rows.Add(drNew);   
 } 
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.