Как сохранить запрос в переменных с помощью C #?

1

У меня есть этот SP:

create procedure SP_Filas
(@fact int)
as
select COUNT(C.id_art) from cat_articulo C inner join det_factura D on C.id_art =        D.id_art
inner join factura F on F.id_fact = D.id_fact
inner join cat_cliente B on B.id_cliente = F.id_cliente
where D.id_fact = @fact

Этот SP собирается бросить, например, 3. Как я могу сохранить это значение 3 в переменной int в С# Asp.NEt?

Теги:
sql-server-2008-r2

2 ответа

0
Лучший ответ

Я не предлагаю использовать array для хранения большого количества данных. Создайте собственный class с указанными вами членами, как IEnumarable ниже, и добавьте каждый экземпляр в коллекцию IEnumarable

public class MyClass
{
    public string id_art { get; set; }
    public string nombre { get; set; }
    public string precio { get; set; }
}


SqlConnection cnx;
String cadCnx = "Here goes my credentials"
cnx = new SqlConnection(cadCnx);

String query = "exec SP_Datos_PDF @fact";
SqlCommand cmd = new SqlCommand(query, cnx);
cmd.Parameters.AddWithValue("@fact", SqlDbType.Int).Value = fact;

cnx.Open();  

DataTable dt = new DataTable();
SqlDataAdapter adp = new SqlDataAdapter(cmd);
adp.Fill(dt);

if (dt.Rows.Count > 0)
{
    for (int i = 0; i <= filas; i++)
    {
        DataRow row = dt.Rows[0];

         var item = new MyClass();
         item.id_art = Convert.ToString("id_art");
         item.nombre = Convert.ToString("nombre");
         item.precio = Convert.ToString("precio");
         Items.Add(item);  
         i++;
    }
}

Тем не менее вам не нужен пользовательский Class, а затем вместо этого используйте Tuple

  • 0
    Ваш код не отвечает на вопрос «когда я пытаюсь напечатать total_fact ...» и не помогает, потому что он все еще включает проблемы, упомянутые Д. Стэнли
  • 0
    Я не добавил total_fact в модель MyClass. Вы можете добавить это свойство и делать то же, что и в старом фрагменте.
Показать ещё 4 комментария
2

Я понимаю, что вы, вероятно, новичок в С# (и, возможно, в программировании в целом), но у вас есть МНОГИЕ проблемы, чтобы найти и исправить - я бы предложил начать и построить вашу программу по одной части за раз, используя отладчик (или блок тесты) для проверки результатов по мере поступления. Прямо сейчас кажется, что вы бросаете кучу кода вместе (вероятно, скопировали и вложили из других источников) и пытались разгадать все проблемы. Такой подход приведет к добавлению патчей (что будет трудно понять позже) для решения логических проблем, а не для систематического создания вашей программы по частям.

Тем не менее...

Я вижу несколько вопросов:

  • Вы смешиваете синтаксис AddWithValue и Add. Используйте либо:

    cmd.Parameters.Add("@fact", SqlDbType.Int).Value = fact;
    

    или

    cmd.Parameters.AddWithValue("@fact", fact);
    
  • Вы фактически не извлекаете данные из таблицы. Вам нужно использовать индексатор имен столбцов в DataRow:

     total_fact = Convert.ToString(row["total_fact"]);
                                   ^--^
    
  • вы всегда просто читаете первую строку (DataRow row = dt.Rows[0];)
  • вы вызываете i++ дважды для каждого элемента - один в определении цикла и снова в конце цикла
  • Почему вы извлекаете значения в массивы с фиксированным размером 50? Почему бы просто не сохранить DataTable или использовать List<>?
  • 0
    Все еще не работает. Что мне нужно, так это то, что значения, например, id_art = 5, 6, 7, которые поступают из моей БД, сохраняются в моем массиве id_art [], но это ничего не сохраняет: D:
  • 1
    @RalphVB см. Мое редактирование. Вы, вероятно, не получаете никаких результатов строк из-за неправильного значения @fact . Вы знаете, как использовать отладчик?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню