Исключение нулевого указателя - это индикатор того, что вы используете объект, не инициализируя его.
Например, ниже - класс ученика, который будет использовать его в нашем коде.
public class Student {
private int id;
public int getId() {
return this.id;
}
public setId(int newId) {
this.id = newId;
}
}
Приведенный ниже код дает вам исключение с нулевым указателем.
public class School {
Student obj_Student;
public School() {
try {
obj_Student.getId();
}
catch(Exception e) {
System.out.println("Null Pointer ");
}
}
}
Поскольку вы используете Obj_Student
, но вы забыли инициализировать его, как в правильном коде, показанном ниже:
public class School {
Student obj_Student;
public School() {
try {
obj_Student = new Student();
obj_Student.setId(12);
obj_Student.getId();
}
catch(Exception e) {
System.out.println("Null Pointer ");
}
}
}
Закрытие этого вопроса, поскольку кажется, что возвращаемые значения не поддерживаются и нет элегантного обходного пути!
Способ получить возвращаемое значение состоит в том, чтобы использовать SqlParameter на объекте SqlCommand, которому установили его Направление на ParameterDirection. ReturnValue. Необходимо проверить свойство SelectCommand TableAdapter после называния Заливки.
Примечание: Способ пойти использует SqlParameter где Направление = ParameterDirection. ReturnValue
После этих слов поскольку кто-то уже упомянул SqlParameters, вот является динамическая альтернатива метода использованием DataSet. (если это - то, как Вы едете):
SQL-оператор в качестве примера и C# как товарищи:
string sql = @"DECLARE @ret int
EXEC @ret = SP_DoStuff 'parm1', 'parm2'
SELECT @ret as ret";
DataSet ds = GetDatasetFromSQL(sql); //your sql to dataset code here...
int resultCode = -1;
int.TryParse(ds.Tables[ds.Tables.Count-1].Rows[0][0].ToString(), out resultCode);
Результаты хранимой процедуры загружаются в DataSet и будут иметь столько же DataTables сколько операторы выбора возврата в хранимой процедуре.
Последний DataTable в DataSet будет иметь 1 строку и 1 столбец, который будет содержать возвращаемое значение хранимой процедуры.
Я не могу сказать наверняка, потому что я имею, не используют TableAdapters, но Вы, возможно, должны были бы посмотреть на свою хранимую процедуру и включать следующее приблизительно Ваша процедура.
SET ROWCOUNT OFF
BEGIN
<Procedure Content>
END
SET ROWCOUNT ON