Есть ли лучший способ подключить мою базу данных к моей форме? - PullRequest
0 голосов
/ 20 ноября 2018

Я пытаюсь подключить свою БД к моей 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);
    }
}

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018

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

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

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

0 голосов
/ 20 ноября 2018

Небольшой совет:

Попробуйте использовать класс 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();

    }
}

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

...