/// <summary>
/// 通过SQL语句和条件查询一条数据库信息
/// </summary>
/// <param name="safeSql">存储过程名</param>
/// <param name="values">存储过程参数值</param>
/// <returns>数据库信息数量</returns>
public int GetScalar(string safeSql, params SqlParameter[] values)
{
SqlCommand cmd = new SqlCommand(safeSql, Connection);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddRange(values);
int result = Convert.ToInt32(cmd.ExecuteScalar());
return result;
}
protected void Button2_Click(object sender, EventArgs e)
{
string shuru = TextBox1.Text;
SqlParameter param = new SqlParameter("@name", SqlDbType.NVarChar,50,shuru);
param.Value = shuru;
db.GetScalar("mohuselect");
db.DataBindGridView(GridView1, "mohuselect");
}
这是存储过程
create Procedure [dbo].[mohuselect]
@name nvarchar(50)
AS
BEGIN
SELECT*
FROM s_studentinfo
where name like '%'+@name+'%'
END
error其他信息: 过程或函数 'mohuselect' 需要参数 '@name',但未提供该参数。
SqlParameter param = new SqlParameter("@name", SqlDbType.NVarChar,50,shuru);
param.Value = shuru;
db.GetScalar("mohuselect");
db.DataBindGridView(GridView1, "mohuselect");
这个GetScalar函数调用有问题吧?public int GetScalar(string safeSql, params SqlParameter[] values),人家需要两个参数你这个只传了一个,当然有问题了。还有人家要一个SqlParameter[]类型,不是SqlParameter类型
/// <param name="safeSql">存储过程名</param>
/// <param name="values">存储过程参数值</param>
你现在只是写了一个存储过程名称,没有传值过去,所以肯定就找不到这个参数值了
不是把textbox1的值赋给value了吗 这个赋值有问题吗 求教了
@一个人一直走: 解决了 ok
db.GetScalar("mohuselect");
=>
db.GetScalar("mohuselect",new SqlParameter[]{param});
传参有误,另外,GetScalar内部传过来的参数最好检测下。
GetScalar(string safeSql, params SqlParameter[] values) 你只传了第一个参数,第二个没传过去。另外记得接收返回值。