Я делаю вызов хранимой процедуры SQL, которая возвращает небольшую таблицу пользователей и их боссов. Я хотел бы сравнить эту информацию с переменной в другой части моего приложения, чтобы разрешить/запретить редактирование строки GridView. Для этого кажется, что метод GetValues
вернет мне то, что мне нужно, и это весь набор данных, возвращаемый хранимой процедурой. Мой thikning заключается в том, что как только у меня будут данные в моем приложении, я могу загрузить этот набор данных в массив и пропустить его, чтобы сделать то, что мне нужно сделать.Stuck on SqlDataReader.GetValues Метод
Проблема в этом. В моем коде ниже я получаю ошибку
Не удается неявно преобразовать тип «Int» на «объект»
Когда я смотрю на documentation на этом методе, возвращаемое значение является int
.
Мой вопрос в том, что хранимая процедура содержит строковые данные (имена пользователей и боссов), почему GetValues
mehtod возвращает int
? Как мои фактические данные представлены как число И как я могу получить свои данные в массиве на основе строк?
Я искал множество примеров и информации в Интернете, это, по-видимому, общая проблема новых людей. Я просто не понимаю или получаю это, и я не продвигаюсь. Любая помощь очень ценится!
public Object[] GetDeptAppData()
{
Object[] myObject;
string sp_deptapp, sp_status, sp_supervisor;
//execute stored procedure to get data from database
SqlConnection sqlConnection = new SqlConnection("Data Source=MyServer;Initial Catalog=MyCatalog;Persist Security Info=True;User ID=MyUser;Password=MyPassword");
SqlCommand cmd = new SqlCommand();
SqlDataReader reader;
cmd.CommandText = "SP_Admin_DeptApp_Load";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Connection = sqlConnection;
sqlConnection.Open();
reader = cmd.ExecuteReader();
if (reader.HasRows == true)
{
//sp_deptapp = reader.GetValue(0).ToString();
//sp_status = reader.GetValue(1).ToString();
//sp_supervisor = reader.GetValue(2).ToString();
myObject = reader.GetValues(myObject);
}
else
{
//nothing in reader, throw exception
}
sqlConnection.Close();
return myObject;
}
« myObject - это массив объектов »- так это нормально? Я думал, что myObject будет единственным объектом, содержащим результаты хранимой процедуры. «Метод GetValues возвращает целое число, содержащее счет, помещенный в массив». - Значит, все, что он делает, что-то подсчитывает? Что это такое, и почему меня это волнует? Мне все равно, сколько строк я вернул данные из хранимой процедуры, я забочусь о фактических данных. Кажется, что var COUNT будет содержать только число, представляющее количество элементов в хранимой процедуре. – Rob
@Rob: no, myObject объявлен как 'Object []', поэтому он представляет собой массив объектов. SqlDataReader используется для извлечения одной строки данных за другой. GetValues хранит данные в параметре и возвращает количество полей, которые были прочитаны из текущей строки (!). Если вы хотите получить несколько строк, вам нужно добавить цикл. Я продолжу свой ответ. – Markus
У меня был WHILE lopp, который раньше, но я не думал, что мне это нужно, потому что я ожидал, что GetValues () вернет все мои данные одним большим выстрелом в myObject – Rob