Создание класса sqldatareader

Я изо всех сил пытаюсь создать класс, к которому я могу получить доступ из других классов, которые будут доступны во всем моем приложении. Я новичок в создании классов и ценю любые логические советы. В конечном счете, я хотел бы получить доступ к значениям «checkpoint1-5» в «LUSDschoolDates» как «chk1», «chk2» и т. д. Не уверен, правильно ли я заполняю данные или лучше использовать List‹>?? Подчеркнутая часть указывает на область, в которой я борюсь (что в основном говорит мне, что я не могу получить доступ) и где мне нравится, чтобы это работало. Целью проекта является создание серверной страницы администрирования, на которой пользователь может вставлять данные о дате и времени, и эти значения должны быть доступны во всем приложении.

public class checkpoint
{
    public string checkpoint1 { get; set; }
    public string checkpoint2 { get; set; }
    public string checkpoint3 { get; set; }
    public string checkpoint4 { get; set; }
    public string checkpoint5 { get; set; }
}

public class myCheckpoints
{
    public static string Checkpoints()

    {

        using (SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["lusdMembership"].ConnectionString))
        {
            SqlCommand cmd = new SqlCommand("SELECT chk1, chk2, chk3, chk4, chk5 FROM checkpoints", connection);
            SqlDataReader reader = cmd.ExecuteReader();
            while (reader.Read())
            {
                checkpoint c = new checkpoint();
                c.checkpoint1 = reader["chk1"].ToString();
                c.checkpoint2 = reader["chk2"].ToString();
                c.checkpoint3 = reader["chk3"].ToString();
                c.checkpoint4 = reader["chk4"].ToString();
                c.checkpoint5 = reader["chk5"].ToString();  
            }
            return Checkpoints();
        }

    }
}


public class LUSDschoolDates
{

    public static DateTime chk1 = new DateTime(checkpoint.checkpoint1);

}

ИСПОЛЬЗОВАНИЕ СПИСКА (это не похоже на «контрольную точку возврата»;) контрольная точка общественного класса { public string checkpoint1 { get; набор; } общедоступная строка checkpoint2 { получить; набор; } общедоступная строка checkpoint3 { получить; набор; } общедоступная строка checkpoint4 { получить; набор; } общедоступная строка checkpoint5 { получить; набор; } }

public class myCheckpoints
{
    public List<checkpoint> GetDate(string chDate)

    {

        List<checkpoint> Checkpoints = new List<checkpoint>();
        using (SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["lusdMembership"].ConnectionString))
        {
            SqlCommand cmd = new SqlCommand("SELECT chk1, chk2, chk3, chk4, chk5 FROM checkpoints", connection);
            SqlDataReader reader = cmd.ExecuteReader();
            while (reader.Read())
            {
                checkpoint c = new checkpoint();
                c.checkpoint1 = reader["chk1"].ToString();
                c.checkpoint2 = reader["chk2"].ToString();
                c.checkpoint3 = reader["chk3"].ToString();
                c.checkpoint4 = reader["chk4"].ToString();
                c.checkpoint5 = reader["chk5"].ToString();

            }
            return checkpoint;
        }

    }

person Kristofour    schedule 03.08.2016    source источник
comment
Вы создаете новый экземпляр контрольной точки, но не возвращаете его. Разве это не должен быть обратный контрольно-пропускной пункт; а не возвращать CheckPoints();? Кроме того, если вы ожидаете, что несколько объектов будут возвращены из БД, вам нужно будет добавить их в какую-то коллекцию (например, список‹Контрольная точка›)   -  person LDJ    schedule 03.08.2016
comment
Я разместил редактирование, используя список (как я и сделал изначально), но ему не нравится контрольная точка возврата ;??   -  person Kristofour    schedule 03.08.2016
comment
checkpoint - это тип, а не список. Вы должны вернуть Checkpoints. Однако вы никогда не добавляете какие-либо контрольные точки в список, поэтому список будет пустым. На самом деле это вопрос о синтаксисе C#, а не вопрос ASP.NET или SqlDataReader. Кстати, вам, вероятно, следует использовать правильный регистр для имен типов и полей, чтобы избежать путаницы, например, Checkpoint для типа, checkpoints для списка.   -  person Panagiotis Kanavos    schedule 03.08.2016


Ответы (1)


Я написал для вас класс, который подключается к базе данных SQL и возвращает контрольные точки как List<T>, где T — это класс с именем CheckPoint. Вам также не хватало логики для открытия и закрытия соединения SQL, которое я включил:

public class CheckPoint
{
    public string CheckPoint1 { get; set; }
    public string CheckPoint2 { get; set; }
    public string CheckPoint3 { get; set; }
    public string CheckPoint4 { get; set; }
    public string CheckPoint5 { get; set; }
}

public class MyCheckpoints
{
    public List<CheckPoint> GetCheckPoins()
    {
        List<CheckPoint> checkpoints = new List<CheckPoint>();

        string connectionString = ConfigurationManager.ConnectionStrings["lusdMembership"].ConnectionString;
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            SqlCommand cmd = new SqlCommand("SELECT chk1, chk2, chk3, chk4, chk5 FROM checkpoints", connection);
            connection.Open();
            using (SqlDataReader reader = cmd.ExecuteReader())
            {
                while (reader.Read())
                {
                    CheckPoint c = new CheckPoint
                    {
                        CheckPoint1 = reader["chk1"].ToString(),
                        CheckPoint2 = reader["chk2"].ToString(),
                        CheckPoint3 = reader["chk3"].ToString(),
                        CheckPoint4 = reader["chk4"].ToString(),
                        CheckPoint5 = reader["chk5"].ToString(),
                    };
                    checkpoints.Add(c);
                }
                connection.Close();
            }
        }
        return checkpoints;
    }
}

А вот как это можно вызвать из ASP.NET:

protected void Page_Load(object sender, EventArgs e)
{
    if(!Page.IsPostBack)
    {
        System.Diagnostics.Debugger.Break();

        MyCheckpoints myCheckpoints = new MyCheckpoints();
        List<CheckPoint> checkPoints = myCheckpoints.GetCheckPoins();
        int count = checkPoints.Count;
    }
}

Если вы хотите, чтобы MyCheckpoints можно было повторно использовать в разных проектах, создайте в Visual Studio новый проект типа "Библиотека классов" и скопируйте этот класс в библиотеку классов.

person Denys Wessels    schedule 03.08.2016