Откройте Datareader, вызывая ошибку и не вытягивая правильную информацию - PullRequest
0 голосов
/ 18 мая 2019

Я не уверен, как исправить ошибку, связанную с открытым DataReader, если я закрою его, то он вызывает приступы. Я пытался изменить имена команд, а также другие имена, чтобы предотвратить эту проблему, но, похоже, она сохраняется. Это первая проблема, вторая проблема - я не могу вытащить правильные данные из своего списка. Когда я передаю информацию из базы данных в список, она должна находиться в столбцах FirstName в списке First Name, затем Middle Initials и так далее. Я чувствую, что это может быть проблема с командной строкой q.

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

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using System.Data;
using System.Data.SqlClient;
using System.Data.Sql;
using System.Windows.Forms;




namespace DEITO
{

/// <summary>
/// Interaction logic for Customers.xaml
/// </summary>

public partial class Customers : Window
{




    public static List<String> CustomerFirstName = new List<string>();
    List<String> CustomerMiddleInitial = new List<string>();
    List<String> CustomerLastName = new List<string>();
    List<String> CustomerTaxClass = new List<string>();
    List<String> CustomerEmail = new List<string>();


    public Customers()
    {
        InitializeComponent();


        RetriveCustomerInfo();



    }




    public static string name;


    private List<String> RetriveCustomerInfo()
    {

        DataTable dt = new DataTable();

        try
        {


            SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\SCook\Documents\LoginInformation.mdf;Integrated Security=True;Connect Timeout=30");

            con.Open();




            string q = "SELECT * FROM CustomerInfo";
            SqlCommand Comm = new SqlCommand(q, con);

           // SqlDataAdapter DAdapter = new SqlDataAdapter();



            SqlDataReader ReadThis = Comm.ExecuteReader();

            int Readerint = 0;


            while (ReadThis.Read())
            {





               // int StringCount = 0;


                name = ReadThis.GetString(1);
                //string MN = Reader.GetString(StringCount);
                //string LN = Reader.GetString(StringCount);
                //string TC = Reader.GetString(StringCount);
                //string EM = Reader.GetString(StringCount);

                CustomerFirstName.Add(name);
                //CustomerMiddleInitial.Add(MN);
                //CustomerLastName.Add(LN);
                //CustomerTaxClass.Add(TC);
                //CustomerEmail.Add(EM);

                // cmd..Parameters.Add(new SqlParameter("@FMT", name);







                Comm.ExecuteNonQuery();
                Comm.Parameters.Clear();
                con.Close();

                Readerint = Readerint + 1;
            }








        }
        catch(Exception ex)
        {


            System.Windows.Forms.MessageBox.Show(ex.Message);

        }







        /*string output = string.Join("\n", CustomerFirstName);
        string Out1 = string.Join("\n", CustomerMiddleInitial);
        string Out2 = string.Join("\n", CustomerLastName);
        string Out3 = string.Join("\n", CustomerTaxClass);
        string Out4 = string.Join("\n", CustomerEmail);
        System.Windows.Forms.MessageBox.Show(output); */



        return CustomerFirstName;

    }


    private void Exit_Clicked(object sender, RoutedEventArgs e)
    {

        this.Close();

    }

    public class CustomerInformation
    {

        public string FirstName { get; set; }
        public string MiddleInital { get; set; }
        public string LastName { get; set; }
        public string TaxClass { get; set; }
        public string Email { get; set; }

    }


    public  void FillDataGridWithCustInfo()
    {

        int ArrayNum = 0;

        Int32 length = CustomerFirstName.Count;

        while (length >= ArrayNum)
        {




            CustomerInformation TempCust = new CustomerInformation();
            TempCust.FirstName = name;

            CustomerDataGrid.Items.Add(TempCust);




            ArrayNum = ArrayNum + 1;

        }





    }

    private void AddnewCustomer_Click(object sender, RoutedEventArgs e)
    {

        CustomerInformation TempCust = new CustomerInformation();
        TempCust.FirstName = FirstNameText.Text;
        TempCust.MiddleInital = MiddleInitalText.Text;
        TempCust.LastName = LastNameText.Text;
        TempCust.TaxClass = TaxClassText.Text;
        TempCust.Email = EmailText.Text;

        CustomerDataGrid.Items.Add(TempCust);





        SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\SCook\Documents\LoginInformation.mdf;Integrated Security=True;Connect Timeout=30");

        con.Open();

        string q = "insert into CustomerInfo (FirstName, MiddleInital, LastName, TaxClass, Email) Values(@FMT, @MIT, @LNT, @TCT, @EMT)";
        SqlCommand Comm = new SqlCommand(q, con);
        Comm.Parameters.AddWithValue("@FMT", FirstNameText.Text);
        Comm.Parameters.AddWithValue("@MIT", MiddleInitalText.Text);
        Comm.Parameters.AddWithValue("@LNT", LastNameText.Text);
        Comm.Parameters.AddWithValue("@TCT", TaxClassText.Text);
        Comm.Parameters.AddWithValue("@EMT", EmailText.Text);

        Comm.ExecuteNonQuery();
        Comm.Parameters.Clear();
        con.Close();


        System.Windows.Forms.MessageBox.Show("You have successfully added to the database");


    }




    private void Window_Loaded(object sender, RoutedEventArgs e)
    {


        //RetriveCustomerInfo();


    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {


        FillDataGridWithCustInfo();

    }
  }
}

Я пытаюсь взять данные из базы данных CustomerInfo и заполнить их в CustomerDataGrid. Кажется, это должно быть менее сложно, чем я это представляю, но SQL не мой любимый язык, с которым приходится иметь дело. Когда я изменяю .getstring (некоторый номер) с 0 на 1, он извлекается только из первого ряда данных. поэтому вместо того, чтобы дать мне имя следующего человека, он даст мне средний инициал.

Сообщение об исключении: с этой командой уже связан открытый считыватель данных, который должен быть закрыт первым.

...