exec proc使用从c#文本框中获取的变量

时间:2013-06-17 15:40:00

标签: c# sql sql-server-2008 visual-studio-2008 stored-procedures

我有一个基本的UI,带有一个带3个变量的按钮。

enter image description here

单击Update Profile Class按钮后,执行以下操作:

private void buttonUpdateProfileClass_Click(object sender, EventArgs e)
{
    int ID = Convert.ToInt32(recordID.Text);
    int oldPC = Convert.ToInt32(oldProfileClass.Text);
    int NewPC = Convert.ToInt32(newProfileClass.Text);


    string connstr = @"Data Source=(local)\MydbName ;Persist Security Info=False;";
    SqlConnection conn = new SqlConnection(connstr);
    conn.Open();
    string query;
    query = "exec updateclass 'ID','oldPC','NewPC'";

    SqlCommand cmd = new SqlCommand(query, conn);   

    cmd.Dispose();
    conn.Close();
    conn.Dispose();
    MessageBox.Show("Profile Class updated");

}

我有一个存储过程,其中包含以下SQL(这是我在SSMS中测试过的)

ALTER PROCEDURE [dbo].[updateclass]
   @ID int,
   @NEWCLASS int,
   @OLDCLASS int    
    AS 
    SET NOCOUNT ON;
    update dbo.TEST_TABLE
    set CLASS = @NEWCLASS
    where ID = @ID AND CLASS = @OLDCLASS

我想要的是让用户输入他们关注的ID,陈述旧的配置文件类,并说明新的配置文件类。然后应该运行proc并更新表,但它不起作用。我对存储过程和C#相当新,所以一些建议将非常感激。

1 个答案:

答案 0 :(得分:1)

private void buttonUpdateProfileClass_Click(object sender, EventArgs e) 
{
    int ID = Convert.ToInt32(recordID.Text);
    int oldPC = Convert.ToInt32(oldProfileClass.Text);
    int NewPC = Convert.ToInt32(newProfileClass.Text);


    string connstr = @"Initial Catalog=myDB;Data Source=localhost;Integrated Security=SSPI;";
    SqlConnection conn = new SqlConnection(connstr);
    conn.Open();

    var cmd= new SqlCommand("dbo.updateclass", conn);
    cmd.CommandType = CommandType.StoredProcedure;

    cmd.Parameters.AddWithValue("@ID", ID);
    cmd.Parameters.AddWithValue("@NEWCLASS", NewPC);
    cmd.Parameters.AddWithValue("@OLDCLASS", oldPC); 

    cmd.ExecuteNonQuery();

    cmd.Dispose();
    conn.Close();
    conn.Dispose();
    MessageBox.Show("Profile Class updated");
}