zl程序教程

您现在的位置是:首页 >  后端

当前栏目

C# 调用存储过程

c#存储 过程 调用
2023-09-14 09:03:14 时间
string MyConn = server=数据库服务器Ip;uid=数据库用户名;pwd=密码;database=数据库名称;Trusted_Connection=no SqlConnection MyConnection = new SqlConnection(MyConn);

下面以调用: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();
执行结果如下:


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

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

比如获取pageCount,代码如下:

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

小注

DataReader转DataSet方法


存储过程与函数 MySQL从5.0版本开始支持存储过程和函数。存储过程和函数能够将复杂的SQL逻辑封装在一起,应用程序无须关注存储过程和函数内部复杂的SQL逻辑,而只需要简单地调用存储过程和函数即可