Вопрос об отображении данных сервера SQL в виде вкладок - PullRequest
1 голос
/ 29 марта 2011

Я создаю приложение инвентаризации, используя c #, который извлекает информацию с сервера sql.Я делаю это в виде вкладок, где каждая вкладка представляет отдельный тип элемента.Я включил часть своего кода, что я пытаюсь понять, есть ли лучший способ сделать это?Я не чувствую, что то, что я делаю, правильно, хотя это работает.Все мои запросы для каждой вкладки являются хранимыми процедурами.Во-вторых, как мне вставить и обновить базу данных через сетку?

 public partial class InventoryWindow : Window
{

    private InventoryDS InvDS;

    private String connString = "server=PC-server;database=Inventory;user=user;password=password";

    String sqlString_Routers = InventoryOutputQuery.InventorySummary_Routers();

    public InventoryWindow()
    {
        InitializeComponent();

        if (dgDataView != null)
        {
            SqlConnection con = new SqlConnection(connString);
            SqlDataAdapter adpt = new SqlDataAdapter(sqlString_Routers, con);
            DataSet ds = new DataSet();
            adpt.Fill(ds, sqlString_Routers);
            dgDataView.DataContext = ds;
        }
    }

    private void showTaps()
    {
        String sqlString_Taps = InventoryOutputQuery.InventorySummary_Routers();

        SqlConnection con = new SqlConnection(connString);
        con.Open();
        SqlCommand cmd = new SqlCommand(sqlString_Routers, con);
        SqlDataReader dr = cmd.ExecuteReader();
        DataTable dt = new DataTable();
        dt.Load(dr);
        dgDataView.DataContext = dt;
        con.Close();
    }

    private void showPower()
    {
        String sqlString_Power = InventoryOutputQuery.InventorySummary_Power();

        SqlConnection con = new SqlConnection(connString);
        con.Open();
        SqlCommand cmd = new SqlCommand(sqlString_Power, con);
        SqlDataReader dr = cmd.ExecuteReader();
        DataTable dt = new DataTable();
        dt.Load(dr);
        dgDataView.DataContext = dt;
        con.Close();
    }

    private void showSwitches()
        {
            String sqlString_Switches = InventoryOutputQuery.InventorySummary_Switches();

            SqlConnection con = new SqlConnection(connString);
            con.Open();
            SqlCommand cmd = new SqlCommand(sqlString_Switches, con);
            SqlDataReader dr = cmd.ExecuteReader();
            DataTable dt = new DataTable();
            dt.Load(dr);
            dgDataView.DataContext = dt;
            con.Close();
        }

И ниже, как я привязываю его к сетке:

public void BindGrid(string view)
{
    switch (view.ToUpper())
    {
        case "Routers":
            showTaps();
            break;
        case "POWER":
            showPower();
            break;
        case "SWITCHES":
            showSwitches();
            break;
        case "HUBS":
            showHubs();




private void tcDataView_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            TabItem ti = tcDataView.SelectedItem as TabItem;

            if (ti != null)
                BindGrid(ti.Header.ToString());
        }
                    break;

1 Ответ

1 голос
/ 13 августа 2011

Мое предложение состоит в том, чтобы быть осторожным с тем, как мы обращаемся с SqlConnection. Это дефицитный ресурс, и он скоро закончится, если мы не будем осторожны. Пожалуйста, оберните SQL-код в блок использования, например:

using (SqlConnection con = new SqlConnection(connString))
{
    SqlDataAdapter adpt = new SqlDataAdapter(sqlString_Routers, con);
    DataSet ds = new DataSet();
    adpt.Fill(ds, sqlString_Routers);
    dgDataView.DataContext = ds;
}

Следующая ссылка объяснит эффект использования блока более подробно.

http://www.codeproject.com/KB/cs/tinguusingstatement.aspx

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