Я пытаюсь подключить свою БД к своему 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);
}
}
Вы имеете в виду WPF или WinForms?
это не WPF ...
Yikes я на самом деле имею в виду WinForms, извините
Не пытайтесь повторно использовать один и тот же объект подключения во всем классе. Создайте и утилизировать новый объект для каждого запроса и поделитесь только строкой подключения. Это работает лучше благодаря функции, называемой пулом соединений.
вы можете использовать привязки.
@JoelCoehoorn для SqlCe, большинство людей предпочитают держать его открытым: stackoverflow.com/questions/386223/…
@JeremyThompson Argh. Я знаю это, но я как-то пропустил «Ce», читая вопрос.
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;
Узнайте о MVVM.