таблица данных c # не загружает данные

#c# #ado

#c# #ado

Вопрос:

У меня есть метод в консольном приложении c #, который передает строку имени хранимой процедуры и возвращает datatable.

 public DataTable Table(int val,string ProcedureName)
{
    string Pk = "@"   ProcedureName   "Id";
    var command = GetCommand(ProcedureName);
    command.Parameters[Pk].Value = val;
    DataTable table = new DataTable();
    SqlDataAdapter adapter = new SqlDataAdapter(command);
    adapter.SelectCommand.CommandType = CommandType.StoredProcedure;         
    adapter.Fill(table);
    return table;
}
  

Вот код для вспомогательного метода getCommand

 internal SqlCommand GetCommand(string ProcedureName)
{
    SqlCommand cmd = new SqlCommand()
    {
        Connection = BuildingSecurityContext(),
        CommandType = CommandType.StoredProcedure,
        CommandText = ProcedureName
    };

    _BuildingSecurityContext.Open();
    SqlCommandBuilder.DeriveParameters(cmd);
    _BuildingSecurityContext.Close();
    return cmd;
}
  

Вот метод, который выводит результаты на консоль.

 static void ReadResults(DataTable table)
{
    for (int i = 0; i < table.Rows.Count; i  )
    {
        Console.WriteLine($"{table.Rows[i].Field<int>(0)}{table.Rows[i].Field<string>(1)}{table.Rows[i].Field<string>(2)}");
    }
}
  

Проблема в том, что я получаю сообщение об ошибке, что он не может найти столбец 1. (Мне кажется, что команда не заполняет таблицу данных).

Может кто-нибудь указать мне, где я ошибаюсь?

Комментарии:

1. Было бы удобнее отлаживать, если бы вы поместили значения из таблицы в переменные? Затем вы сможете выполнять отладку и сможете видеть значения на этапе выполнения кода, и вам поможет intellisense. Первое, что я бы сделал, это подтвердил, что table.rows.count > 0 и count точны, и ваш sproc возвращает то, что должен.

Ответ №1:

параметры начинаются с @, но большинство процедур этого не делают — вы уверены, что хотите добавить знак @?

также эта строка не имеет смысла

  command.Parameters[Pk].Value = val;