C# Połączenie się z bazą danych, dane w listbox

Witam,

jak się połączyć z bazą danych, a następnie wyświetlić poprane dane w listbox-e?

Rozumiem, że zaczynasz przygodę z bazami danych. Jeśli tak to wpierw zapoznaj się z ADO .NET (kolejny krok to ADO .NET Entity Framework). W zależności od tego jaka to baza danych może być potrzebne ściągnięcie dodatkowych bibliotek (jeśli MS SQL Server to wszystko jest zawarte w .NET Framework). Gdy już napiszesz funkcję, która pobierze dane z b.danych i wstawi je np. do obiektu klasy DataTable lub do kolekcji obiektów Twojego typu to użyjesz właściwości DataSource, DisplayMember oraz ValueMember, żeby wyświetlić to w ListBox. Przykład jak użyć tych właściwości masz tutaj http://msdn.microsoft.com/en-us/library … .aspx#Y798

Chodzi tutaj o bazę Accessa, jeśli chodzi o aplikację cmd bez problemu się łączy natomiast jeśli ma to wstawić do lisbox-a pojawia się problem thx za odpowiedź

Bez komunikatu błędu, fragmentu kodu, informacji o tym co dokładnie jest nie tak, nie jestem w stanie Ci pomóc. W przypadku łączenia się z b.danych Access też nie potrzeba dodatkowych bibliotek, bo wszystko zawarte jest w .NET Framework. Powinny Cię zainteresować klasy z przestrzeni nazw System.Data.OleDb.

connetionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=baza.mdb;";

            OleDbConnection conn = new OleDbConnection();

    string SQL = "Select Identyfikator, Marka, Km, Kolor, Ilosckoni from Auto";

I teraz jak to wyświetlić w lixtbox-e, tak żeby potem po zaznaczeniu danego rekordu można by go usunąć za pomocą odpowiedniego polecenia

Dodajesz sobię przestrzeń nazw using System.Data.OleDb; a następnie możesz użyć, np. takiego kodu (zwraca on obiekt klasy DataTable):

private void Form1_Load(object sender, EventArgs e)

{

    listBox1.DataSource = Fill("select Identyfikator, Marka, Km, Kolor, Ilosckoni from Auto");

    listBox1.DisplayMember = "Marka";

    listBox1.ValueMember = "Identyfikator";

}


public DataTable Fill(string sql)

{

    DataTable table = null;

    OleDbConnection conn = null;

    OleDbDataAdapter dataAdapter = null;


    try

    {

        conn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=baza.mdb");

        dataAdapter = new OleDbDataAdapter(new OleDbCommand(sql, conn));

        table = new DataTable();


        conn.Open();

        dataAdapter.Fill(table);


        return table;

    }

    catch (Exception ex)

    {

        throw ex;

    }

    finally

    {

        if (conn != null && conn.State == ConnectionState.Open)

            conn.Close();

    }

}

Zachęcam Cię ponownie do zapoznania się z ADO .NET. Tutoriali na ten temat jest masa i pewno większość z nich opiera się właśnie na bazie danych MS Access. I jeszcze jedno … do wyświetlania danych tak, żeby potem wygodnie można je było usuwać, dodawać, itd. służy kontrolka DataGridView,a nie ListBox.

Wielkie dzienks ;p

Nie ma za co. Trzymaj tutaj jeszcze fragment kodu z użyciem kontrolki DataGridView, który pokazuje jak możesz zapisywać zmiany w bazie danych przy użyciu adapter-ów.

DAL.cs

using System;

using System.Data;

using System.Data.OleDb;


namespace DataAdapterDemo

{

    public class DAL

    {

        private OleDbConnection connection = null;

        private OleDbDataAdapter dataAdapter = null;

        private OleDbCommandBuilder builder = null;


        public DAL(string sql, string connectionString)

        {

            connection = new OleDbConnection(connectionString);

            dataAdapter = new OleDbDataAdapter(new OleDbCommand(sql, connection));


            builder = new OleDbCommandBuilder(dataAdapter);

            dataAdapter.UpdateCommand = builder.GetUpdateCommand();

            dataAdapter.InsertCommand = builder.GetInsertCommand();

            dataAdapter.DeleteCommand = builder.GetDeleteCommand();


            Data = null;

        }


        public DataTable Data { get; private set; }


        public void Fill()

        {

            try

            {

                if (Data != null)

                    Data.Dispose();

                Data = new DataTable();


                connection.Open();

                dataAdapter.Fill(Data);

            }

            catch (Exception ex)

            {

                throw ex;

            }

            finally

            {

                if (connection.State == ConnectionState.Open)

                    connection.Close();

            }

        }


        public void SaveChanges()

        {

            try

            {

                if (Data != null)

                {

                    connection.Open();

                    dataAdapter.Update(Data);

                }

            }

            catch (Exception ex)

            {

                throw ex;

            }

            finally

            {

                if (connection.State == ConnectionState.Open)

                    connection.Close();

            }

        }


        public void Dispose()

        {

            if (Data != null)

                Data.Dispose();

            if (dataAdapter != null)

                dataAdapter.Dispose();

            if (builder != null)

                builder.Dispose();

            if (connection != null)

                connection.Dispose();

        }

    }

}

Form1.cs

using System;

using System.Windows.Forms;


namespace DataAdapterDemo

{

    public partial class Form1 : Form

    {

        private DAL dal;


        public Form1()

        {

            InitializeComponent();

        }


        private void Form1_Load(object sender, EventArgs e)

        {

            dal = new DAL("select Identyfikator, Marka, Km, Kolor, Ilosckoni from Auto",

                @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=baza.mdb");

        }


        private void Form1_FormClosing(object sender, FormClosingEventArgs e)

        {

            dal.Dispose();

        }


        private void saveButton_Click(object sender, EventArgs e)

        {

            dal.SaveChanges();

            refreshButton_Click(null, null);

        }


        private void refreshButton_Click(object sender, EventArgs e)

        {

            dal.Fill();

            dataGridView1.DataSource = dal.Data;

        }

    }

}

Jeszcze czy mógłbyś zamieścić cały projekt w jakimś zipie??

Bo jednak jak się zobaczy jakiś gotowy projekt to lepiej wchodzi do głowy i łatwiej jest pojąć pewne rzeczy.

A taka fragmentaryzacja kodu przysparza kłopotów :frowning:

https://rapidshare.com/files/1959417023/DataAdapterDemo.zip

Tam są dwa projekty. Pierwszy odnosi się do kodu, który wkleiłem wyżej, a ten drugi korzysta z wygenerowanego kodu przez kreator (ale działa na tej samej zasadzie). W drugim użyłem też kontrolek BindingSource i BindingNavigator.

Po w klikaniu się w plik DataAdapterDemo.sln wyświetla się komunikat:"Nie można odczytać formatu Microsoft Solution 11.00.

Najwyraźniej masz starszą wersję Visual Studio. Ten plik sln jest przygotowany dla Visual Studio 2010. Utwórz nowy projekt (byle jaki, np. projekt pliku .dll). Wraz z tym projektem zostanie wygenerowany nowy plik sln (właściwy dla Twojej wersji Visual Studio). Następnie kliknij prawym przyciskiem myszy na tym pliku solution i wybierz Add -> Existing Project …, i w ten sposób dodaj oba te projekty. Tutaj masz nowego zip-a

https://rapidshare.com/files/3550177473 … erDemo.zip bo zmieniłem, żeby projekty te były kompilowane do wersji NET Framework równej 3.5, a nie 4 (wersja 4 jest chyba nieobsługiwana w starszych wersjach Visual Studio).

Okej, pobieram nową bo moja wersja to 3.1 ;p

Dodane 15.06.2011 (Śr) 17:27

Wielkie dzienki, problem rozwiązany.

Wreszcie wiem z czym to się je;p

Jesteś Wielki! !!