Akhand Jyoti Ответов: 1

Получите различные табличные данные из базы данных, отредактируйте их в gridview и сохраните в базе данных.когда номер столбца в таблице не фиксирован.


Я работаю над проектом.где у меня есть два выпадающих списка и один gridview.и после выбора одной из баз данных .Все таблицы,присутствующие в базе данных, должны появиться во втором выпадающем списке.А теперь вот что я хотел сделать .После выбора таблицы из выпадающего списка.Gridview должен быть заполнен данными, доступными в выбранной таблице.
Теперь я хотел дать опцию редактирования в Gridview .
После редактирования он должен сохранить данные в базе данных.
моя главная проблема заключается в том,что столбец таблицы имеет фиксированное имя.Когда-то 2 столбца,когда-то 3 ,когда-то 4 и его переменная.Не имею ни малейшего представления .Пожалуйста, может ли кто-нибудь суджест меня.Как я могу завершить эту работу?Я застрял здесь.Танки впереди.

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

для взятия имени таблицы в выпадающем списке.
protected void DropDownList3_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                using (SqlConnection conn = ReturnConnection2(ConString3))
                {
                    SqlDataAdapter da = new SqlDataAdapter("USE " + DropDownList3.Text.ToString() + ";SELECT name FROM sys.Tables ;", conn);
                    DataTable ds = new DataTable();
                    da.Fill(ds);
                    DropDownList4.DataSource = ds;
                    DropDownList4.DataTextField = "name";
                    DropDownList4.DataValueField = "name";
                    DropDownList4.DataBind();
                    conn.Close();
                    DropDownList4.Items.Insert(0, new ListItem("Select Table Name", "Select Table Name"));
                }
            }
            catch
            {

            }
        }
//populate grid
protected void DropDownList2_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                string central_string;
                using (SqlConnection conn = ReturnConnection())
                {
                    SqlDataAdapter cmd = new SqlDataAdapter("SELECT server_name,server_type,user_ID,password FROM  server_name where server_name='" + DropDownList5.SelectedValue + "'", conn);
                    conn.Open();
                    DataTable dt = new DataTable();
                    cmd.Fill(dt);

                    string Datasource = "Data Source=" + dt.Rows[0][0].ToString();
                    string user_ID = "User ID=" + dt.Rows[0][2].ToString();
                    string password = "Password=" + dt.Rows[0][3].ToString();
                    string Initial_catalog = "Initial Catalog=" + DropDownList1.Text;
                    central_string = Datasource + ";" + user_ID + ";" + password + ";" + Initial_catalog;

                }
                loadgrd(central_string);
            }
            catch
            {

            }
        }

Как дать edit для изменения имени столбца не получается.
пожалуйста помочь.Заранее спасибо.

Richard Deeming

SqlDataAdapter da = new SqlDataAdapter("USE " + DropDownList3.Text.ToString() + ";SELECT name FROM sys.Tables ;", conn);...SqlDataAdapter cmd = new SqlDataAdapter("SELECT server_name,server_type,user_ID,password FROM  server_name where server_name='" + DropDownList5.SelectedValue + "'", conn);


Не делай этого так. Использование конкатенации строк может привести и приведет к уязвимостям SQL-инъекций в вашем коде. НИКОГДА используйте конкатенацию строк для построения SQL-запроса. ВСЕГДА используйте параметризованный запрос.

Все, что вы хотели знать о SQL-инъекции (но боялись спросить) | Трой Хант[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? | Обмен Стеками Информационной Безопасности[^]
Шпаргалка по параметризации запросов | OWASP[^]

conn.Open();
conn.ChangeDatabase(DropDownList3.Text);
SqlDataAdapter da = new SqlDataAdapter("SELECT name FROM sys.Tables;", conn);
...


SqlDataAdapter cmd = new SqlDataAdapter("SELECT server_name,server_type,user_ID,password FROM  server_name where server_name = @server_name", conn);
cmd.SelectCommand.Parameters.AddWithValue("@server_name", DropDownList5.SelectedValue);

1 Ответов

Рейтинг:
1

Maciej Los

Я бы предложил использовать набор данных[^].

Документация MSDN гласит:
Тот самый ADO.NET DataSet-это резидентное представление данных в памяти, обеспечивающее согласованную модель реляционного программирования независимо от источника содержащихся в ней данных. Набор данных представляет собой полный набор данных, включая таблицы, которые содержат, упорядочивают и ограничивают данные, а также отношения между таблицами.


Таким образом, вы можете подключиться к своей базе данных при запуске приложения. Когда пользователь выберет конкретную таблицу, все, что вам нужно, это получить объект DataTable[^] объект из DataSet благодаря простой инструкции:

DataTable dt = YourDataSet.Tables["TableName"];
YourGridView.DataSource = dt;


Объекты DataSet и DataTable имеют несколько методов для отправки обновленных данных обратно в базу данных, например: набор данных.Метод AcceptChanges (System.Data)[^]

Для получения более подробной информации, пожалуйста, смотрите: Наборы данных, таблицы данных и представления данных | Microsoft Docs[^]

Удачи вам!