EDIT:
Пожалуйста, прочитайте комментарии, оставленные в конце вашего вопроса. Если вы не будете участвовать, как все остальные, это смущает и расстраивает, а те, кто охотно вам поможет, просто проигнорируют ваш запрос.
Пожалуйста, предоставьте некоторую информацию в вашем посте. Если у нас нет четкой информации, мы дико угадываем и делаем предположения.
- Какой язык вы используете?
- Используете ли вы MSSQL, MySQL, Oracle? Какая версия?
- Linq для SQL, Linq для EF или другое решение ORM?
Эта хранимая процедура не выглядит так, как будто ВОЗВРАЩАЕТ единичный результат значения, а использует рекурсию и курсоры для "обхода" результата. Очень, Очень, Очень грязно.
Эта SP - реальная проблема здесь. Я понимаю, что вы, возможно, не сможете исправить это, но вам может быть лучше: а) сделать свою собственную хранимую процедуру или б) назвать хранимую процедуру старым добрым способом с помощью dataAdapter или его эквивалента.
В качестве другого пункта, вам было бы целесообразно взглянуть на пример кода, который я вам дал, и понять, что он будет менее подвержен ошибкам и другим проблемам. В наших подходах есть несколько ключевых отличий, которые вы должны уделить время, чтобы понять.
Оригинальный пост:
Хранимые процедуры обычно возвращают DataSets, а не arraylist (это типы .NET). Ваша реализация может также использовать некоторую очистку.
Измените его на что-то вроде этого, простите за ошибки синтаксиса, я делаю VB весь день.
Примечание: ID имеет обе буквы заглавными, а также наблюдать, как переменные объявляются в каждой области. Вы можете выбрать другой шаблон, но это пример стандарта.
//retrieves a list of strings related to the itemID
public List<String> RetriveItem(int itemID)
{
// declare our return value
List _itemList = new List<String>; // int, whatever type of list
// create a data context with the using statement (so it will be cleaned up when
// the operation is completed.
using (MyDataContext _db=new MyDataContext())
{
// get the data from the stored procedure
DataSet _ds = _db.Base_RetriveItem(itemID);
// go through each row in the first table (you may have more tables to look in
foreach DataRow _dr in _ds.Tables(0)
{
// adds the first column value in the row to the return list.
_itemList.Add(Convert.ToString(_dr(0)); //convert to whatever type your list is.
}
}
return _itemList;
}
В качестве альтернативы вы можете использовать IQueryable внутри блока using.
var listOfItems = from i in _db._db.Base_RetriveItem(itemID) select i;
foreach i in listOfItems
{
_itemList.Add(i); //convert to whatever type your list
}
Его сложно представить без подробностей и обратной связи.
"- это хранимая процедура из данных
контекст проблемы с хранимым
процедура, которая опускает стол
GetSubcategories "
Это действительно сбивает с толку. Процедура GET означает, что она ПОЛУЧАЕТ данные, а не УДАЛЯЕТ ТАБЛИЦУ. Пожалуйста, уточните это.