如何调用存储过程
-
2009年6月18日 6:33
protected DataSet getCursor(int nPges)
{
SqlCommand cmd = new SqlCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "sp_getPage";
cmd.Connection = myFun.GetConnection();SqlParameter nCurPge = cmd.Parameters.Add(@nCurrentPage, SqlDbType.Int, 3);
nCurPge.Direction = ParameterDirection.Input;
nCurPge.Value = nPges;
DataSet myCur = new DataSet();
SqlDataAdapter sda = new SqlDataAdapter(cmd);
sda.SelectCommand = cmd;
sda.Fill("myCur");this.TextBox2.Text = myCur.Tables[0].Rows[i][1].ToString();
this.TextBox3.Text = myCur.Tables[0].Rows[i][2].ToString();
this.TextBox4.Text = myCur.Tables[0].Rows[i][3].ToString();
this.TextBox5.Text = myCur.Tables[0].Rows[i][4].ToString();
}
编译器错误信息: CS0103: 当前上下文中不存在名称“nCurrentPage”- 已移动 Sheng Jiang 蒋晟MVP, Moderator 2009年6月18日 18:47 数据库开发 ([Loc]From:ASP.NET 与 AJAX)
全部回复
-
2009年6月18日 6:38版主SqlParameter nCurPge = cmd.Parameters.Add(“@nCurrentPage”, SqlDbType.Int, 3);
Denn ich gehor nur dir!坚持不懈!http://hi.baidu.com/1987raymond -
2009年6月18日 6:50
再请教一下,“@nCurrentPage”非要与后台调用的存储过程参数变量名一致吗?
-
2009年6月18日 6:52版主嗯 我想原则上是的 不过我没试过哈,我一直都是写的一致的变量名 你可以自己测试看看哈
Denn ich gehor nur dir!坚持不懈!http://hi.baidu.com/1987raymond -
2009年6月18日 7:00刚试了一下不行,或者是还有其它的调用方式?
感觉这样不友好,如果我只知道过程名,但只是知道传递参数的类型那怎么办?或者万一存储过程加密了呢? -
2009年6月18日 7:05版主如果你知道存储过程名,可以通过 SqlCommandBuilder.DeriveParameters 获取存储过程的参数
知识改变命运,奋斗成就人生! -
2009年6月18日 7:07版主
private static SqlParameter[] DiscoverSpParameterSet(SqlConnection connection, string spName, bool includeReturnValueParameter) { if( connection == null ) throw new ArgumentNullException( "connection" ); if( spName == null || spName.Length == 0 ) throw new ArgumentNullException( "spName" ); SqlCommand cmd = new SqlCommand(spName, connection); cmd.CommandType = CommandType.StoredProcedure; connection.Open(); SqlCommandBuilder.DeriveParameters(cmd); connection.Close(); if (!includeReturnValueParameter) { cmd.Parameters.RemoveAt(0); } SqlParameter[] discoveredParameters = new SqlParameter[cmd.Parameters.Count]; cmd.Parameters.CopyTo(discoveredParameters, 0); foreach (SqlParameter discoveredParameter in discoveredParameters) { discoveredParameter.Value = DBNull.Value; } return discoveredParameters; }
知识改变命运,奋斗成就人生! -
2009年6月18日 7:15SqlParameter P1 = new SqlParameter("参数名", "值");
P1.Direction = ParameterDirection.Input;
cmd.Parameters.Add(P1);
CC.FENG -
2009年6月18日 7:28
感觉还是vfp调用方便,管它三七二十一,知道调用方式,传值过去即可.方便呀,
怎么这MS开发的越来越不人性化呀 -
2009年6月18日 7:32版主这种方式是可以的, 但你需要自己写方法支持你的写法
知识改变命运,奋斗成就人生! -
2009年6月18日 7:32版主
SqlHelper 类中就有这样的实现方式,你可以下载源代码看看
知识改变命运,奋斗成就人生!- 已标记为答案 Allen Chen - MSFTModerator 2009年6月24日 5:48