C# Заполнение раскрывающегося списка SQL Данные сервера - PullRequest
0 голосов
/ 06 марта 2020

Я пытаюсь заполнить раскрывающийся список на основе столбца в SQL Таблице сервера. Но когда я пробую разные команды get, в выпадающем списке отображается только пустое поле.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Web.UI.WebControls;

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

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            SqlConnection con = new SqlConnection();

            con.ConnectionString = @"Data Source= localhost; Initial Catalog= Travel;Integrated Security=True;";

            con.Open();

            SqlDataReader dr;

            SqlCommand sqlCmd = new SqlCommand("SELECT Sites FROM dbo.Sites", con);
            sqlCmd.CommandType = CommandType.Text;

            dr = sqlCmd.ExecuteReader();

            while (dr.Read())
            {
                comboBox1.Items.Add(dr.GetData(Type));
            }
        }
    }
}

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

Тип является типом, который недопустим в данном контексте

Я искал эту ошибку, но мой Google-Fu имеет подвел меня. Любая помощь очень ценится.

Ответы [ 2 ]

3 голосов
/ 06 марта 2020

Измените код для явного чтения столбца данных Sites:

while (dr.Read())
{
   comboBox1.Items.Add(dr["Sites"]);
} 

. Примечание:

Обычно для больших приложений или приложений, которые потребуется сохранить в обозримом будущем, вы хотите разделить весь код DAL (DataAccessLayer) на выделенный менеджер или репозиторий. Просто создайте новый проект, предназначенный для доступа к БД, все методы, которые должны возвращаться, представляют собой единичные экземпляры классов доменов или их списки. Если вы держите его отдельно и не имеете никакого представления о презентации, ваш DAL можно использовать повторно. В дополнение к этому, бесплатное предоставление кода презентации SQL сделает все более согласованным. Затем добавьте ссылку на проект для этой сборки DAL из вашей сборки презентации.

1 голос
/ 06 марта 2020

Еще раз спасибо, Стив, и вы тоже, T McKeown. Я буду работать над другими предложениями в комментариях. Вот мой пересмотренный код, чтобы раскрывающийся список работал.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Web.UI.WebControls;

namespace WindowsFormsApp3
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            SqlConnection con = new SqlConnection();

            con.ConnectionString = @"Data Source= localhost; Initial Catalog= Travels;Integrated Security=True;";

            con.Open();

            SqlDataReader dr;

            SqlCommand sqlCmd = new SqlCommand("SELECT Sites FROM dbo.Sites", con);
            sqlCmd.CommandType = CommandType.Text;
            dr = sqlCmd.ExecuteReader();
            while (dr.Read())
            {
                comboBox1.Items.Add(dr["Sites"]);
            }
        }

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {


        }
    }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...