繁体   English   中英

如何在C#中执行存储过程?

[英]How do I execute a Stored Procedure in C#?

使用以下SQL存储过程,如何在btnYes按钮的事件处理程序中执行它? 我不知道如何执行存储过程。 我设置了一个TextBox来输入RoomNo 当我点击btnYes ,预期的结果应是Occupied布尔值被设置为truetblRooms基于它的表RoomNo

CREATE PROCEDURE sproc_tblRooms_Update
    -- Parameters for the UPDATE statement
    @RoomNo   INT,
    @Occupied BIT
AS
    UPDATE tblRooms
    SET Occupied = @Occupied
    WHERE RoomNo = @RoomNo

在类中设置的Update()方法:

public void Update(clsRoom RoomOccupancy)
{
    // This function will update an existing reservation in the database

    // Connect to the database
    clsDataConnection DBRoomVacancy = new clsDataConnection();

    // Add the parameters
    DBRoomVacancy.AddParameter("@RoomNo", RoomOccupancy.RoomNo);
    DBRoomVacancy.AddParameter("@Occupied", RoomOccupancy.Occupied);

    // Execute the query
    DBRoomVacancy.Execute("sproc_tblRooms_Update");
}

我想要单击以执行存储过程的btnYes按钮的事件处理程序:

protected void btnYes_Click(object sender, EventArgs e)
{

}

您应该能够调用Update()创建类的实例,该方法后Update()方法中的一员。 由于您没有提供完整的类定义,因此在下面的示例中将其命名为MyClass

protected void btnYes_Click(object sender, EventArgs e)
{
    var myClass = new MyClass();
    myClass.Update(new clsRoom
    {
        RoomNo = 1234,
        Occupied = true
    });
}

话虽这么说,作为clsDataConnection笔记,您的clsDataConnection类需要大量工作。 我没看很久,但是让我IDisposable是,没有实现IDisposable的类(例如SqlConnectionSqlCommand等)都没有包装在using块中或调用Dispose()

我还注意到该类对所有查询使用SqlConnection的共享实例。 最佳做法是为每个查询创建一个SqlConnection实例

我还将反转一些if语句,并使用return摆脱一些不必要的else块。 这样做的原因是为了减少不必要的嵌套,并避免使用Doom / Arrow代码金字塔

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Data.SqlClient;

public partial class news : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    { 

    }
    protected void btnYes_Click(object sender, EventArgs e)
    {
        try
        {

            string str = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
            SqlConnection con = new SqlConnection(str );
            SqlCommand cmd = new SqlCommand("sproc_tblRooms_Update", con);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Add("@RoomNo", SqlDbType.VarChar).Value = txttitle.Text);
            cmd.Parameters.Add("@Occupied ", SqlDbType.VarChar).Value = Occupied.SelectedValue.ToString();
            con.Open();
            cmd.ExecuteNonQuery();
            con.Close();
            lblmsg.Text = "Room has been Updated Successfully";
        }
        catch (Exception)
        { }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM