ASP.NET C # Форма отправки | Может ли моя функция быть короче и быстрее? - PullRequest
1 голос
/ 14 марта 2011

Я запускаю проект, и у меня есть функция Onclick, выполняемая в коде моей веб-формы. Мне было любопытно, если бы был способ сделать код короче и / или быстрее?

protected void PageSubmit_Click(object sender, EventArgs e)
{
    string storedProc = "";
    string successMsg = "";

    DataTable dt = new DataTable();
    if (hfPageID.Value.Length > 0)
    {
        storedProc = "pageUpdate";
        successMsg = "Page updated!";
    }
    else
    {
        storedProc = "pageInsert";
        successMsg = "Page inserted!";
    }
    using (SqlConnection con = new SqlConnection(Global.conString))
    {
        con.Open();
        using (SqlCommand cmd = new SqlCommand(storedProc, con))
        {
            if (storedProc == "pageUpdate")
            {
                cmd.Parameters.Add("@originalID", SqlDbType.VarChar).Value = hfPageID.Value;
            }
            cmd.Parameters.Add("@title", SqlDbType.VarChar).Value = Global.SafeSqlLiteral(txtPage.Text, 1);
            cmd.Parameters.Add("@contentTypeID", SqlDbType.VarChar).Value = rblContentTypesGetAll.SelectedValue;
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.ExecuteNonQuery();
        }
        con.Close();

        //Update Content Page Repeater
        using (SqlCommand cmd = new SqlCommand("pageGetAll", con))
        {
            using (SqlDataAdapter da = new SqlDataAdapter(cmd))
            {
                da.Fill(dt);
            }
        }
    }

    Session["formProcessed"] = successMsg;
    Response.Redirect(redirectURL);
}

Кроме того, я установил проверку в хранимой процедуре для сбоя pageUpdate, если заголовок конфликтует с существующим заголовком. Как я могу проверить, действительно ли оно обновляется, когда возвращается из хранимой процедуры?

ALTER PROCEDURE [dbo].[pageUpdate]
    @originalID uniqueidentifier,
    @contentTypeID varchar (100),
    @title varchar (100)
AS 

UPDATE 
    pages
SET
    contentTypeID = COALESCE (@contentTypeID, contentTypeID),
    title = COALESCE (@title, title)
WHERE
    ID = @originalID
    AND 
        NOT EXISTS
        (
            SELECT
                *
            FROM
                pages
            WHERE
                title = @title
        )

1 Ответ

3 голосов
/ 14 марта 2011

Есть ряд вещей, которые вы могли бы сделать, которые, безусловно, помогли бы улучшить читаемость и повторное использование кода.

Отделите логику вашей страницы / пользовательского интерфейса от логики базы данных. то есть есть класс, который обрабатывает доступ к данным, и вызывает его со своей страницы, а не для события click. Если вы хотите получить эти данные в другом месте, вам придется скопировать и вставить код, а не просто вызывать один и тот же метод для общего объекта.

Кроме того, чтобы сократить код вашей базы данных, вы можете использовать блок приложений доступа к данным, как показано в Библиотеке предприятия, как эти здесь . Он будет обрабатывать подключения и исключения для вас среди других преимуществ, перечисленных в документации.

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