কিভাবে একটি ডেটা টেবিল মাধ্যমে পুনরাবৃত্তি


143

আমি একটি মাধ্যমে পুনরাবৃত্তি প্রয়োজন DataTable। আমার নাম রয়েছে সেখানে একটি কলাম ImagePath

যখন আমি ব্যবহার DataReaderকরি তখন আমি এটি এইভাবে করি:

SqlDataReader dr = null;
dr = cmd.ExecuteReader();
while (dr.Read())
{
    TextBox1.Text = dr["ImagePath"].ToString();
}

কীভাবে আমি একই জিনিস ব্যবহার করে অর্জন করতে পারি DataTable?


1
dr.Read () নেটওয়ার্ক বাফার থেকে সারি সারি পাঠ করে, ডাটাবেস থেকে সারি সারি না। ডাটাবেস থেকে কেবল একটি আনতে হবে। অতএব একটি ডেটেবল থেকে পড়া কোনও কার্যকারিতা লাভের প্রস্তাব দিচ্ছে না।
বিকাশকারী

উত্তর:


286
DataTable dt = new DataTable();

SqlDataAdapter adapter = new SqlDataAdapter(cmd);

adapter.Fill(dt);

foreach(DataRow row in dt.Rows)
{
    TextBox1.Text = row["ImagePath"].ToString();
}

... ধরে নিচ্ছে সংযোগটি উন্মুক্ত এবং কমান্ডটি সঠিকভাবে সেট আপ হয়েছে। আমি বাক্য গঠনটিও যাচাই করিনি, তবে এটি আপনাকে ধারণা দেওয়া উচিত।


ধরুন কেউ linqসমাধান খুঁজছেন এবং ভাবছেন (cmd)যে উপরের সমাধানটি কোথায়?
জোগি

@ রেহান খান - cmdকার্যকর করার জন্য এসকিউএল কমান্ড হবে। আপনি যদি লিনকিউ ব্যবহার করছেন, আপনি নিজের লিনকুই ক্যোয়ারী লিখবেন এবং সেভাবে আপনার ফলাফল পাবেন।
জাস্টিন নিসনার

ফোরচের পরিবর্তে লুপের জন্য ব্যবহার করবেন না কেন? সারিটি কেবল একবার ব্যবহার করা হচ্ছে, সুতরাং লুপের জন্য আরও ভাল পারফরম্যান্স দেওয়া যাবে?
এনরিকো

32
foreach (DataRow row in myDataTable.Rows)
{
   Console.WriteLine(row["ImagePath"]);
}

আমি স্মৃতি থেকে এটি লিখছি।
আশা করি এটি আপনাকে অবজেক্টের মডেলটি বোঝার জন্য যথেষ্ট ইঙ্গিত দেয়।

DataTable-> DataRowCollection-> DataRow(যেটি কলামের নাম বা অরডিনাল ব্যবহার করে column সারিটির কলামের বিষয়বস্তু সন্ধান করতে পারে)।

-> = ধারণ করে।


21

আপনি ডেটাসেটের জন্য লিনক এক্সটেনশনগুলিও ব্যবহার করতে পারেন:

var imagePaths = dt.AsEnumerble().Select(r => r.Field<string>("ImagePath");
foreach(string imgPath in imagePaths)
{
    TextBox1.Text = imgPath;
}

দয়া করে মনে রাখবেন আপনার AsEnumerable()জন্য নির্ভরতা হিসাবে যুক্ত DataTableকরা দরকার System.Data.DataSetExtensions
সিগড

নেট কোর উপলব্ধ নয় এখানে দেখুন: stackoverflow.com/questions/45900952/...
Markive

5

উপরের উদাহরণগুলি বেশ সহায়ক are তবে, আমরা যদি পরীক্ষা করতে চাই যে একটি নির্দিষ্ট সারিতে একটি নির্দিষ্ট মান আছে কিনা। যদি হ্যাঁ হয় তবে মুছুন এবং ভাঙ্গুন এবং কোনও মানের ক্ষেত্রে সরাসরি নিক্ষেপ করার ত্রুটি। নীচে কোড কাজ করে:

foreach (DataRow row in dtData.Rows)
        {
            if (row["Column_name"].ToString() == txtBox.Text)
            {
                // Getting the sequence number from the textbox.
                string strName1 = txtRowDeletion.Text;

                // Creating the SqlCommand object to access the stored procedure
                // used to get the data for the grid.
                string strDeleteData = "Sp_name";
                SqlCommand cmdDeleteData = new SqlCommand(strDeleteData, conn);
                cmdDeleteData.CommandType = System.Data.CommandType.StoredProcedure;

                // Running the query.
                conn.Open();
                cmdDeleteData.ExecuteNonQuery();
                conn.Close();

                GetData();

                dtData = (DataTable)Session["GetData"];
                BindGrid(dtData);

                lblMsgForDeletion.Text = "The row successfully deleted !!" + txtRowDeletion.Text;
                txtRowDeletion.Text = "";
                break;
            }
            else
            {
                lblMsgForDeletion.Text = "The row is not present ";
            }
        }

সারিগুলি মোছার কাজটি সম্পন্ন করার এটি একটি উন্মাদ উপায় !! কেবল একটি টিএসকিউএল মুছে ফেলার বিবরণ ছাড়ুন!
মিচ গম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.