Есть ли лучший способ подключить мою БД к моей форме?

Я пытаюсь подключить свою БД к своему ListView, и я пытаюсь найти способ лучше, чем то, что написано в книге. Я просмотрел пару форумов, и на многих из них есть то же самое, что и в моем коде ниже.

У нас не было много времени на изучение баз данных в классе, поэтому многие мои знания о строках подключения получены из Интернета, и небольшая глава в книге.
Моя база данных называется GameStoreLibrary.

using System.Data;
using System.Data.SqlServerCe;

public partial class DisplayGameStoreTable : Form
{
    //WHAT THE C# FORUMS SAY TO DO
    public SqlCeConnection cn = new SqlCeConnection(@"
           Data Source=.;
           Initial Catalog=DB GameStoreLibrary;
           Integrated Security=True;
           MultipleActiveResultSets=True");

private void DisplayGameStoreTable_Load(object sender, EventArgs e)
{
    try
    {
        cn.Open();
    }

    catch(SqlCeException ex)
    {
        MessageBox.Show(ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
        Application.ExitThread();
    }
 }

private void NewGameBttn_Click(object sender, EventArgs e)
{
    listView1.Items.Clear();
    SqlCeCommand cm = new SqlCeCommand("SELECT * FROM newGames ORDER BY gametitle ASC", cn);

    try
    {
        SqlCeDataAdapter da = new SqlCeDataAdapter(cm);
        DataTable dt = new DataTable();
        da.Fill(dt);

        foreach (DataRow dr in dt.Rows)
        {
            ListViewItem item = new ListViewItem(dr["gametitle"].ToString());
            item.SubItems.Add(dr["releasedate"].ToString());
            item.SubItems.Add(dr["console"].ToString());
            item.SubItems.Add(dr["company"].ToString());
            item.SubItems.Add(dr["gameprice"].ToString());
            item.SubItems.Add(dr["quantity"].ToString());
        }
    }

    catch(Exception ex)
    {
        MessageBox.Show(ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
}

Узнайте о MVVM.

SLaks 20.11.2018 02:46

Вы имеете в виду WPF или WinForms?

SLaks 20.11.2018 02:46

это не WPF ...

Jazb 20.11.2018 02:52

Yikes я на самом деле имею в виду WinForms, извините

user9046433 20.11.2018 02:54

Не пытайтесь повторно использовать один и тот же объект подключения во всем классе. Создайте и утилизировать новый объект для каждого запроса и поделитесь только строкой подключения. Это работает лучше благодаря функции, называемой пулом соединений.

Joel Coehoorn 20.11.2018 03:37

вы можете использовать привязки.

Daniel A. White 20.11.2018 03:46

@JoelCoehoorn для SqlCe, большинство людей предпочитают держать его открытым: stackoverflow.com/questions/386223/…

Jeremy Thompson 20.11.2018 04:51

@JeremyThompson Argh. Я знаю это, но я как-то пропустил «Ce», читая вопрос.

Joel Coehoorn 20.11.2018 19:50
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
8
61
2

Ответы 2

Small Tip :

Попробуйте использовать класс DBConnect вместо того, чтобы каждый раз вводить строку подключения и закрывать соединение.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;

namespace InventoryManagementSystem
{
    class DBConnect : IDisposable
    {


        private static String connectionString = @"Data Source=(LocalDB)\v11.0;AttachDbFilename=D:\Private\InventoryManagementSystem\InventoryManagementSystem\InventoryDB.mdf;Integrated Security=True";
        public SqlConnection con = new SqlConnection(connectionString);

        public DBConnect()
        {
            try
            {
                con.Open();
                Console.WriteLine("Database connected");
            }
            catch (Exception e)
            {
                Console.WriteLine(e.StackTrace);
                Console.WriteLine("Database Connection Failed");
                throw new Exception();
            }
        }

        public void Dispose()
        {
            con.Close();
        }
    }
}

После того, как у вас есть это в своем проекте, вам просто нужно создать объект всякий раз, когда вы хотите получить доступ к базе данных.

public void getData(){

    using(DBConnect db = new DBConnect()){
        String q = "select * from TestTable";
        SqlCommand cmd = new SqlCommand(q,db.con);
        SqlDatareader r = cmd.ExcecuteReader();

    }
}

Это также автоматически закроет соединения.

Чтобы добавить к ответу Гихана, также принято создавать файл App.Config и помещать туда строку подключения, чтобы она не находилась внутри вашего исходного кода. Тогда проще ничего не перекомпилировать.

Используйте раздел ConnectionStrings в App.Config, а затем вы можете получить строку подключения, используя код:

System.Configuration.ConfigurationManager.ConnectionStrings ["MyDBConnectionString"]. ConnectionString;

Другие вопросы по теме