执行存储过程,为什么稍改点,就报错?
这是一个存储过程:
CREATE PROCEDURE 存储过程_1
@adress NVARCHAR(50),
@age INT  
AS
SELECT * FROM 客户表 WHERE 住址 <> @adress AND 年龄 > @age;
下面是应用程序:
  private void button1_Click(object sender, EventArgs e)
        {
             sel("北京", 42);  //调用sel方法
        }
  private void sel(string s_住址, int i)
         {
             string str = "server = '(local)';database=Person;integrated security = true";
             using (SqlConnection con = new SqlConnection(str))
             {
                 con.Open();
                 using (SqlCommand cmd = con.CreateCommand())
                 {
                     cmd.CommandType = CommandType.StoredProcedure;  
                    cmd.CommandText = "存储过程_1 ";
                     SqlParameter spt = new SqlParameter("@age", SqlDbType.Int, 4);
                     spt.Value = i;
                     cmd.Parameters.Add(spt);
                     spt = new SqlParameter("@adress", SqlDbType.NVarChar, 20);
                     spt.Value = s_住址;
                     cmd.Parameters.Add(spt);
                     using (SqlDataReader sdr = cmd.ExecuteReader())
                     {
                         while (sdr.Read())
                         {
                             listBox1.Items.Add(sdr["姓名"] + "  " + sdr["住址"]);
                         }
                     }
                 }
             }
         }
上面代码能正常运行,可是如果把红色字体的代码换成以下这两句:
cmd.CommandType = CommandType.Text;   
cmd.CommandText = "EXEC 存储过程_1 ";       
为什么报错:“过程或函数 '存储过程_1' 需要参数 '@adress',但未提供该参数。”      
为什么会这样报错?不会一样的吗?
------解决方案--------------------如果是执行存贮过程 那么cmd.CommandText 应该对应存储过程的名称  ,如果你改了 ,数据库中是不存在EXEC 存储过程_1 这个存储过程的,当然会报错
------解决方案--------------------
cmd.CommandType = CommandType.Text;  
cmd.CommandText = "EXEC 存储过程_1 ";  EXEC 存储过程_1 后面要紧跟着参数,如 EXEC 存储过程_1 '北京', 42