存储过程和执行普通sql语句很类似,也是可以用SqlCommand及其他多种方式来实现,这里说SqlCommand的方式, 和执行sql方式不同的是设定CmdObj.CommandType = CommandType.StoredProcedure;告诉编译器是执行的存储过程. 怎么输入输出?输入和输出都是使用参数方式, 用CmdObj.Parameters.Add("@chapterTotal", SqlDbType.Int).Direction = ParameterDirection.Output;告诉编译器,@chapterTotal这个参数是输出参数, 输入参数赋值,和获取输出参数见例子. 获取输出结果有2方式, //从连接池中取出一个连接,只要"连接字符串"是相同的,就是从相同的连接池中取连接 SqlConnection myConn = new SqlConnection(application["connString"].ToString()); //建立sql命令对象 SqlCommand CmdObj = new SqlCommand("chapterList", myConn); //存储过程名 连接 CmdObj.CommandType = CommandType.StoredProcedure;//表明执行的内容是存储过程 CmdObj.Parameters.Add("@bookID", SqlDbType.Int).Value =bookID;//添加输入参数,并赋值 CmdObj.Parameters.Add("@bookID1", SqlDbType.Int).Value =44; CmdObj.Parameters.Add("@chapterTotal", SqlDbType.Int).Direction = ParameterDirection.Output; //添加参数,并表明是个输出参数 //打开连接 myConn.Open(); //获得结果,用SqlDataReader方式,既可以以行集方式获取结果,也可以获取单值或值集,但不知道是否可以同时获取行集和单值 SqlDataReader sqlReader = null; sqlReader = CmdObj.ExecuteReader(); if(sqlReader.Read()) { chapterTotal = sqlReader.GetInt16(0); } //获得结果,直接用SqlCommand方式 CmdObj.ExecuteNonQuery(); // chapterTotal = Convert.ToInt32(CmdObj.Parameters["@chapterTotal"].Value); 注意事项: 1,命令参数的名字必须要和存储过程中定义的名字完全一致. 2.使用SqlDataReader方式返回结果时,存储过程中的sql语句不能是返回的值直接赋给输出参数的形式,不然 sqlReader.Read()根本不会成功,如SELECT @ChapterTotal=ChapterTotal FROM BookIndex就不行, SELECT ChapterTotal FROM BookIndex执行用sqlReader.Read()就可以获得 存储过程可以同时返回多个输出参数和多个不同列数的行集,其间要使用union all, 详见http://community.csdn.net/Expert/TopicView3.asp?id=5680198
asp.net 数据库存储过程使用 c#
最新推荐文章于 2023-12-27 19:22:42 发布