ANKIT JOHRI Ответов: 2

Как получить данные из таблицы SQL с помощью таблицы данных


Я использую data reader прямо сейчас, но мне нужно использовать Datatable в приведенном ниже методе. Пожалуйста, дайте мне знать, как я могу реализовать приведенный ниже метод с помощью таблицы данных вместо использования устройства чтения данных.

Что я уже пробовал:

try
{
con.Open();
                cmd.CommandText = "SELECT  c.UHFID,c.EmployeeName,c.EmpRank, c.EmpUnit , c.EmpPNo , c.EmpAdhaarNo , c.EmpDOI , c.EmpValidity , c.EmpPhoto,c.VehicleType,c.VehicleModelNo,c.VehicleNo,c.VehicleOwner,c.VehiclePhoto,c.VisitorsName,c.VisitorType,c.VisitorsValidity,c.VisitorsVehicle,c.VisitorsAddress,c.VisitorsPhotoIdentity,c.VisitorsPhotoIdentityNo,c.VisitorsPhoto,c.Remarks,c.SemiVisitorName,c.SemiVisitorType,c.SemiVisitorValidity,c.SemiVisitorVehicle,c.SemiVisitorAddress,c.SemiVisitorEmployedLocation,SemiVisitorPhoto FROM RegistrationDetails c inner join CategoryMaster p on c.Category=p.Id where UHFID ='" + textBox1.Text + "'";
                cmd.Connection = con;
                rdr = cmd.ExecuteReader();

                while (rdr.Read())
                {

                    if (rdr["UHFID"].ToString() == textBox1.Text)
                    {
                        //for employye
                        if (rdr["EmployeeName"].ToString() != "")
                        {
                            lbl_empname.Text = rdr["EmployeeName"].ToString();
                            lbl_rank.Text = rdr["EmpRank"].ToString();
                            lbl_unit.Text = rdr["EmpUnit"].ToString();
                            lbl_pno.Text = rdr["EmpPNo"].ToString();
                            lbl_adhar.Text = rdr["EmpAdhaarNo"].ToString();
                            DOI = rdr["EmpDOI"].ToString();
                            lbl_DOI.Text = DOI.Substring(0, 10);
                            empvalidity = rdr["EmpValidity"].ToString();
                            lbl_validity.Text = empvalidity.Substring(0, 10);

                            byte[] bytes = (byte[])rdr["EmpPhoto"];
                            MemoryStream ms = new MemoryStream(bytes);
                            pb_employee.Image = Image.FromStream(ms);

                            panel_emp.Location = new Point(15, 36);
                            panel_emp.Size = new Size(1878, 856);
                            panel_semivisitor.Visible = false;
                            panel_vehicle.Visible = false;
                            panel_visitor.Visible = false;
                            panel_emp.Visible = true;

                        }

                            //for visitor
                        else if (rdr["VisitorsName"].ToString() != "" && rdr["Remarks"].ToString() != "")
                        {
                            lbl_visitorname.Text = rdr["VisitorsName"].ToString();
                            lbl_visitortype.Text = rdr["VisitorsType"].ToString();

                            validityvisitor = rdr["VisitorsValidity"].ToString();
                            lbl_visitorvalidity.Text = validityvisitor.Substring(0, 10);

                            lbl_visitorehicle.Text = rdr["VisitorsVehicle"].ToString();
                            lbl_tomeet.Text = rdr["Remarks"].ToString();
                            lbl_photoidproof.Text = rdr["VisitorsPhotoIdentity]"].ToString();
                            lbl_idproofdetails.Text = rdr["VisitorsPhotoIdentityNo"].ToString();

                            byte[] bytes = (byte[])rdr["VisitorsPhoto"];
                            MemoryStream ms = new MemoryStream(bytes);
                            pb_visitor.Image = Image.FromStream(ms);

                            panel_visitor.Location = new Point(15, 36);
                            panel_visitor.Size = new Size(1878, 856);
                            panel_visitor.Visible = true;
                            panel_semivisitor.Visible = false;
                            panel_emp.Visible = false;
                            panel_vehicle.Visible = false;

                        }

                            //for vehicle
                        else if (rdr["VehicleType"].ToString() != "")
                        {


                            lbl_vehicletype.Text = rdr["VehicleType"].ToString();
                            lbl_vehichlemake.Text = rdr["VehicleModelNo"].ToString();
                            lbl_vehicleno.Text = rdr["VehicleNo"].ToString();
                            lbl_vehicleowner.Text = rdr["VehicleOwner"].ToString();
                            byte[] bytes = (byte[])rdr["VehiclePhoto"];
                            MemoryStream ms = new MemoryStream(bytes);
                            pb_vehicle.Image = Image.FromStream(ms);

                            panel_vehicle.Location = new Point(15, 36);
                            panel_vehicle.Size = new Size(1878, 856);
                            panel_vehicle.Visible = true;
                            panel_visitor.Visible = false;
                            panel_semivisitor.Visible = false;
                            panel_emp.Visible = false;
                        }
                        //for semivisitor
                        else if (rdr["SemiVisitorName"].ToString() != "" && rdr["address"].ToString() != "")
                        {
                            lbl_seminame.Text = rdr["SemiVisitorName"].ToString();
                            lbl_semitype.Text = rdr["SemiVisitorType"].ToString();
                            validitysemivisitor = rdr["SemiVisitorValidity"].ToString();
                            lbl_semivalidity.Text = validitysemivisitor.Substring(0, 10);
                            lbl_semvehicle.Text = rdr["SemiVisitorVehicle"].ToString();
                            lbl_semiaddress.Text = rdr["SemiVisitorAddress"].ToString();
                            lbl_semilocation.Text = rdr["SemiVisitorEmployedLocation"].ToString();

                            byte[] bytes = (byte[])rdr["SemiVisitorPhoto"];
                            MemoryStream ms = new MemoryStream(bytes);
                            pb_semivisitor.Image = Image.FromStream(ms);

                            panel_semivisitor.Location = new Point(15, 36);
                            panel_semivisitor.Size = new Size(1878, 856);
                            panel_semivisitor.Visible = true;

                            panel_emp.Visible = false;
                            panel_vehicle.Visible = false;
                            panel_visitor.Visible = false;

                        }

                    }

                }
                con.Close();

                con.Open();
                ds = new DataSet();
                da = new SqlDataAdapter("select * from registrationdetails", con);
                da.Fill(ds, "registrationdetails");
                con.Close();
            }
            catch (Exception ex)
            {

                MessageBox.Show("Unable to Read the UHF TAG", "Ecartes-TAG READER", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }

2 Ответов

Рейтинг:
1

Maciej Los

Если вы хотите загрузить данные в datatable, используйте объект DataTable.метод Load[^].

Итак, после этой строки:

rdr = cmd.ExecuteReader();

добавлять:
DataTabled dt = new DataTable();
dt.Load(rdr);
//the data have been loaded into the datatable object ;)


Рейтинг:
0

Wendelius

Прежде всего, вы должны использовать параметры вместо объединения значений в SQL statamenet. Это оставляет вас открытыми для SQL-инъекция - Википедия[^].

Теперь что касается использования таблицы данных, которую вы можете использовать DbDataAdapter.Метод Заполнения (DataTable) (System.Data.Общий)[^ заполнить таблицу данными, используя указанный оператор SQL. Еще один пример здесь В C# Объект Dataadapter.Заполнить[^]


ANKIT JOHRI

но вместо того, чтобы цикл while, как я могу использовать цикл foreach, чтобы проверить колонки, если петли.

Wendelius

Не уверен, правильно ли я вас понял, но вы заполнили бы таблицу данных, используя один вызов метода заполнения. Таким образом, вам не нужно зацикливать данные во время операции заполнения.

После завершения заполнения вы можете выполнить цикл по строкам таблицы данных например с помощью

foreach (строка DataRow в mydatatable.Грядки) { ...

Внутри этого туалета вы можете петлять по колоннам

foreach (DataColumn col в mydatatable.Колонки) { ...

А чтобы получить доступ к одному значению столбца в строке, вы можете использовать что-то вроде

if (row[col].Метод toString() == ....

ANKIT JOHRI

я получаю это исключение : ссылка на объект не установлена на экземпляр объекта.

Wendelius

Не видя соответствующих частей кода, совершенно невозможно указать причину.