读书人

执行存储过程为什么稍改点就报错?

发布时间: 2012-09-12 09:21:30 作者: rapoo

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

读书人网 >C#

热点推荐