下面以调用:​​Sql Server 分页存储过程​​为例

调用代码如下:

string MyConn = "server=数据库服务器Ip;uid=数据库用户名;pwd=密码;database=数据库名称;Trusted_Connection=no";
SqlConnection MyConnection = new SqlConnection(MyConn);
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = new SqlCommand();
da.SelectCommand.Connection = MyConnection;
da.SelectCommand.CommandText = "proc_ListPageInt";
da.SelectCommand.CommandType = CommandType.StoredProcedure;

IDataParameter[] parameters = {

new SqlParameter("@tblName", SqlDbType.NVarChar) ,
new SqlParameter("@fldName", SqlDbType.NVarChar) ,
new SqlParameter("@pageSize", SqlDbType.Int) ,
new SqlParameter("@page", SqlDbType.Int) ,
new SqlParameter("@pageCount", SqlDbType.Int) ,
new SqlParameter("@Counts", SqlDbType.Int) ,
new SqlParameter("@fldSort", SqlDbType.NVarChar) ,
new SqlParameter("@Sort", SqlDbType.Bit) ,
new SqlParameter("@strCondition", SqlDbType.NVarChar) ,
new SqlParameter("@ID", SqlDbType.NVarChar) ,
new SqlParameter("@Dist", SqlDbType.Bit)
};
// 设置参数类型
parameters[0].Direction = ParameterDirection.Input;// 设置为输入参数
parameters[0].Value = "sysobjects";

parameters[1].Direction = ParameterDirection.Input;// 设置为输入参数
parameters[1].Value = "*";

parameters[2].Direction = ParameterDirection.Input;// 设置为输入参数
parameters[2].Value =20;

parameters[3].Direction = ParameterDirection.Input;// 设置为输入参数
parameters[3].Value = 1;

parameters[4].Direction = ParameterDirection.Output;// 设置为输出参数

parameters[5].Direction = ParameterDirection.Output;// 设置为输出参数

parameters[6].Direction = ParameterDirection.Input;// 设置为输入参数
parameters[6].Value = "id";

parameters[7].Direction = ParameterDirection.Input;// 设置为输入参数
parameters[7].Value = 0;

parameters[8].Direction = ParameterDirection.Input;// 设置为输入参数
parameters[8].Value = "";

parameters[9].Direction = ParameterDirection.Input;// 设置为输入参数
parameters[9].Value = "id";

parameters[10].Direction = ParameterDirection.Input;// 设置为输入参数
parameters[10].Value =0;

da.SelectCommand.Parameters.Add(parameters[0]);
da.SelectCommand.Parameters.Add(parameters[1]);
da.SelectCommand.Parameters.Add(parameters[2]);
da.SelectCommand.Parameters.Add(parameters[3]);
da.SelectCommand.Parameters.Add(parameters[4]);
da.SelectCommand.Parameters.Add(parameters[5]);
da.SelectCommand.Parameters.Add(parameters[6]);
da.SelectCommand.Parameters.Add(parameters[7]);
da.SelectCommand.Parameters.Add(parameters[8]);
da.SelectCommand.Parameters.Add(parameters[9]);
da.SelectCommand.Parameters.Add(parameters[10]);

MyConnection.Open();


调用存储过程的东东已经搞定了,那么怎么获取dataset呢?

方法一:

SqlDataAdapter dp = new SqlDataAdapter(da.SelectCommand);
DataSet ds = new DataSet();
dp.Fill(ds);


方法二:

SqlDataReader reader = da.SelectCommand.ExecuteReader();//读取数据 
DataSet ds = this.ConvertDataReaderToDataSet(reader);
MyConnection.Close();


执行结果如下:

C# 调用存储过程_过程

与在数据库中执行的结果一致。

那么新的问题来了,如果获取存储过程的返回参数呢?

比如获取pageCount,代码如下:

int pageCount = int.Parse(da.SelectCommand.Parameters["@pageCount"].Value.ToString());


小注

​DataReader转DataSet方法​