Abdalla Ben Omran Ответов: 2

Как прочитать несколько различных команд в одном методе ?


Привет

я хочу прочитать много разных команд в одном методе, передавая int year в качестве параметра для метода . метод должен читать 3 различные команды, например 2017,2018 и 2019 .
то, что я сделал до сих пор, заключается в следующем

Что я уже пробовал:

public int GetSumYear(int year)
        {
            int sum = 0;
            string CS = "+++++"
            using (SqlConnection connection = new SqlConnection(CS))
            {
                connection.Open();
                SqlCommand command = new SqlCommand("select COUNT (ÜbertragenAm) from BranchSale_all where ÜbertragenAm between '2017-01-01' and  '2018-01-01'", connection);
            
                // here i want to read the same command for 2018 and 2019
                sum = (int)command.ExecuteScalar();
            }
            return sum;
        }

Maciej Los

В чем вопрос?

[no name]

я хочу получить сумму за каждый год 2017, 2018, 2019, используя один метод

F-ES Sitecore

Имейте строку с токенами вместо дат;
-... между "[дата1]" и " [дата2]""

используйте строку.Замените, чтобы заменить токены [date1] и [date2] фактическими датами, которые вы хотите, и выполните команду. Сделайте это три раза, или в цикле, если вы хотите выполнить в течение последовательных лет.

ZurdoDev

Идите вперед и вызовите 2 другие команды. В чем же проблема?

2 Ответов

Рейтинг:
5

Maciej Los

Попробуй:

public DataTable GetSumofYears(int[] years)
{
    DataTable dt = new DataTable();
    string query = string.Format("SELECT COUNT(ÜbertragenAm) Cnt, YEAR(ÜbertragenAm) AS Yer
                       FROM BranchSale_all
                       GROUP BY YEAR(ÜbertragenAm)
                       WHERE YEAR(ÜbertragenAm) IN {0}", string.Join(", ", years.Select(x=>"[" + x + "]")));
    string CS = "+++++"
    using (SqlConnection connection = new SqlConnection(CS))
    {
        connection.Open();
        using (SqlCommand command = new SqlCommand(query, connection))
            using(SqlDataReader reader = command.ExecuteReader())    
                dt.Load(reader);
    }
    return dt;
}


Использование:
int[] years = {2017, 2018, 2019};
DataTable dt = GetSumofYears(years);
foreach(DataRow dr in dt.Rows)
{
    Console.WriteLine("{0} {1}", dr["Cnt"], dr["Yer"]);
}


OriginalGriff

Кстати: вам нужно место в группе by.

Maciej Los

- Спасибо, пол.
Обновленный.

Рейтинг:
16

OriginalGriff

Если вы хотите получить несколько результатов, не используйте ExecuteScalar - это возвращает одно значение, обычно целое число.

Вместо этого используйте SQL DataReader или SqlDataAdapter и DateTable:

using (SqlConnection con = new SqlConnection(strConnect))
    {
    con.Open();
    using (SqlCommand cmd = new SqlCommand("SELECT Id, description FROM myTable", con))
        {
        using (SqlDataReader reader = cmd.ExecuteReader())
            {
            while (reader.Read())
                {
                int id = (int) reader["Id"];
                string desc = (string) reader["description"];
                Console.WriteLine("ID: {0}\n    {1}", id, desc);
                }
            }
        }
    }

using (SqlConnection con = new SqlConnection(strConnect))
    {
    con.Open();
    using (SqlDataAdapter da = new SqlDataAdapter("SELECT MyColumn1, MyColumn2 FROM myTable WHERE mySearchColumn = @SEARCH", con))
        {
        da.SelectCommand.Parameters.AddWithValue("@SEARCH", myTextBox.Text);
        DataTable dt = new DataTable();
        da.Fill(dt);
        myDataGridView.DataSource = dt;
        }
    }


[no name]

OriginalGriff. спасибо за ваше решение, но на самом деле я хочу получить сумму каждого года, используя один метод и используя count (), и вопрос в том, как прочитать несколько команд в одном методе, даже можно получить сумму года 2017,2018 и 2019

OriginalGriff

Даже если вы хотите, чтобы подсчеты были разделены на 2017, 2018 и 2019 годы, это означает, что вы не можете использовать ExecuteScalar - вам нужно использовать считыватель или адаптер данных для чтения более одного значения.

GROUP BY сделает это прекрасно, как показано Мацей в № 2

Maciej Los

Хорошо объяснил.
5ed!