У меня есть этот 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?
Я не предлагаю использовать 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
Я понимаю, что вы, вероятно, новичок в С# (и, возможно, в программировании в целом), но у вас есть МНОГИЕ проблемы, чтобы найти и исправить - я бы предложил начать и построить вашу программу по одной части за раз, используя отладчик (или блок тесты) для проверки результатов по мере поступления. Прямо сейчас кажется, что вы бросаете кучу кода вместе (вероятно, скопировали и вложили из других источников) и пытались разгадать все проблемы. Такой подход приведет к добавлению патчей (что будет трудно понять позже) для решения логических проблем, а не для систематического создания вашей программы по частям.
Тем не менее...
Я вижу несколько вопросов:
Вы смешиваете синтаксис 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++
дважды для каждого элемента - один в определении цикла и снова в конце циклаDataTable
или использовать List<>
?@fact
. Вы знаете, как использовать отладчик?