KevinClaassens Ответов: 1

Как вернуть одно значение из базы данных с помощью хранимой процедуры, требующей параметров


Добрый день, ребята. Я хочу вернуть одно значение из базы данных. Я хочу отобразить полученное значение в текстовом поле, где параметр хранимой процедуры берется из выбранного индекса сетки. По какой-то причине он не показывается

Что я уже пробовал:

protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                //string txtSession = " ";
                if (Session["IDNumber"] == null)
                {

                }

                else
                {
                    string Id = Session["IDNumber"].ToString();
                    bll = new BusinessLogicLayer();

                    try
                    {
                        doc = new Docket();

                    }

                    catch (Exception)
                    {

                    }

                }
            }

protected void grdInvolvedDockets_SelectedIndexChanged(object sender, EventArgs e)
        {
            doc = new Docket();
            bll = new BusinessLogicLayer();
            Session["DocketName"] = grdInvolvedDockets.SelectedRow.Cells[1].Text;
            doc.DocketName = Session["DocketName"].ToString();
            bind(doc);

           
        }

        public void bind(Docket doc)
        {
            doc = new Docket();
            using (SqlConnection con = new SqlConnection("Data Source=KEVIN-PC;Integrated Security=true;Initial Catalog=E-Docket1"))
            {
                con.Open();
                SqlCommand cmd = new SqlCommand("spLoadDevelopment", con);
                string result = Session["DocketName"].ToString();
                doc.DocketName = result;
                SqlParameter param = new SqlParameter("@DocketName", doc.DocketName);
                cmd.Parameters.AddWithValue("@DocketName", doc.DocketName.ToString());
                string new1;
                new1 = cmd.ExecuteScalar().ToString();





                //lblDetails.Text = result;
            }

        }


Моя хранимая процедура очень проста и выглядит примерно так

ALTER PROCEDURE [dbo].[spLoadDevelopment] 
	-- Add the parameters for the stored procedure here
	@DocketName varchar(50)
AS
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;

    -- Insert statements for procedure here
	SELECT [Development]
	FROM DOCKET
	WHERE DocketName = @DocketName
END

PIEBALDconsult

Зачем для этого использовать хранимую процедуру? Встроенная табличнозначная функция будет делать то же самое и быть более гибкой.

KevinClaassens

Не могли бы вы быть в состоянии показать мне, как это делается? Мне нужен был способ отображения некоторого текста в зависимости от того, какой столбец выбран, и вот как далеко я зашел

Richard MacCutchan

Просто вставьте оператор SELECT в свой код. На самом деле нет никакого смысла в хранимой процедуре для такой простой команды.

Karthik_Mahalingam

держите точку останова и проверьте, где она идет не так.
в чем ценность "док.DocketName"

Richard Deeming

Возможно, это как-то связано с тем, что после сохранения значения, возвращаемого хранимой процедурой, в локальной переменной new1 вы выбрасываете эту переменную , ничего с ней не делая!

Если вы хотите отобразить значение, возвращенное из хранимой процедуры, то вам нужно будет что-то с ним сделать.

1 Ответов

Рейтинг:
9

Rubol

Изменить процедуру [dbo].[spLoadDevelopment]
-- Добавьте параметры для хранимой процедуры здесь
@DocketName varchar(50)
@Development varchar(50) вывод
АС
НАЧАТЬ
-- Установить параметр nocount на добавленную предотвратить дополнительные результирующие наборы
-- вмешательство в операторы SELECT.
УСТАНОВИТЕ NOCOUNT ON;

-- Вставьте инструкции для процедуры здесь
Выберите @Development = [разработка]
ИЗ ДОСЬЕ
Где DocketName = @DocketName
КОНЕЦ