猿问

使用存储过程更新 C# 中的列

我试图通过填写文本框并单击保存来更新表中的列;我没有收到错误或任何东西。只是什么都没发生!


这是我的存储过程:


ALTER PROCEDURE [dbo].[sp_UpdateProj]

    @ORAID INT = NULL,

    @FullTitle NVARCHAR(250) = NULL

AS

BEGIN

    UPDATE tbl_ProjectFile

    SET FullTitle = @FullTitle

    WHERE ORAID = @ORAID

END

当我在 SQL Server Management Studio 中运行它时,它可以工作,给出一个 ID 和标题名称


这是我的 C# 代码


protected void Button_Save_Click(object sender, EventArgs e)

{

    string connectionStr = ConfigurationManager.ConnectionStrings["ORAProjectConnectionString"].ConnectionString;

    using (SqlConnection con = new SqlConnection(connectionStr))

    {

        con.Open();


        string query = "sp_UpdateProj Where ORAID=" + int.Parse(TextBox_ORAID.Text);


        SqlCommand cmd = new SqlCommand(query, con);

        cmd.CommandType = CommandType.StoredProcedure;

        cmd.Connection = con;


        cmd.Parameters.AddWithValue("@ORAID", Convert.ToInt32(TextBox_ORAID.Text));

        cmd.Parameters.AddWithValue("@FullTitle", TextBox_FullTitle.Text);


        con.Close();

    }

}


翻过高山走不出你
浏览 194回答 3
3回答

白衣染霜花

您(几乎)正确设置了所有内容 - 但您实际上从未执行过存储过程!试试这个代码:protected void Button_Save_Click(object sender, EventArgs e){    string connectionStr = ConfigurationManager.ConnectionStrings["ORAProjectConnectionString"].ConnectionString;    // the query string should be **ONLY** the stored procedure name - nothing else!    string query = "dbo.sp_UpdateProj";    // you should put **both** SqlConnection and SqlCommand in "using" blocks    using (SqlConnection con = new SqlConnection(connectionStr))    using (SqlCommand cmd = new SqlCommand(query, con))    {        cmd.CommandType = CommandType.StoredProcedure;        // fill the parameters - avoiding "AddWithValue"        cmd.Parameters.Add("@ORAID", SqlDbType.Int).Value = Convert.ToInt32(TextBox_ORAID.Text);        cmd.Parameters.Add("@FullTitle", SqlDbType.NVarChar, 250).Value = TextBox_FullTitle.Text;        con.Open();        // you need to **EXECUTE** the command !        cmd.ExecuteNonQuery();        con.Close();    }}

慕桂英546537

Button_Save_Click事件处理程序中有一些错误:当您使用commandTypeis 时,StoredProcedure您只需传递存储过程名称使用带有sp_前缀的存储过程创建性能问题(在 SQL Server 中使用 sp_ 作为用户存储过程的前缀导致性能影响)你忘了调用ExecuteNonQuery方法试试这个代码:protected void Button_Save_Click(object sender, EventArgs e){ string connectionStr = ConfigurationManager.ConnectionStrings["ORAProjectConnectionString"].ConnectionString; string procedureName = "dbo.UpdateProj"; using (SqlConnection con = new SqlConnection(connectionStr)) using(SqlCommand cmd = new SqlCommand(procedureName , con)) {    cmd.CommandType = CommandType.StoredProcedure;    cmd.Parameters.AddWithValue("@ORAID", Convert.ToInt32(TextBox_ORAID.Text));    cmd.Parameters.AddWithValue("@FullTitle", TextBox_FullTitle.Text);    con.Open();    cmd.ExecuteNonQuery()    con.Close(); }}

慕的地8271018

您的查询行应该是:string query = "sp_UpdateProj";您已经将参数作为其下方的对象。然后加cmd.ExecuteNonQuery();执行
随时随地看视频慕课网APP
我要回答