日期:2014-05-17  浏览次数:20685 次

执行存储过程,为什么稍改点,就报错?
这是一个存储过程:
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