存储过程调用类
于是我写了代码完成了此功能.代码中有两个类![]()
一个是用来做返回值的载体的用一个DataSet返回查询出的数据,用一个Hashtable返回存储过程的返回值和输出
参数.
usingSystem;
usingSystem.Data;
usingSystem.Collections;
namespaceDDLLY
{
/**////
///SqlResult的摘要说明。
///
publicclassSqlResult
{
publicDataSetMyDataSet=newDataSet();
publicHashtableReturnVal=newHashtable();
}
}
这个类是具体的实现,代码并不复杂,这里我也就不罗嗦了.只需要注意方法的参数是可变参数.
usingSystem;
usingSystem.Data;
usingSystem.Data.SqlClient;
namespaceDDLLY
{
/**////
///SQLProcHelper的摘要说明。
///
publicclassSQLProcHelper
{
//存储过程名
privateStringprocedureName=null;
//连接字符串
privateStringconnectionString=null;
privateSqlConnectionmyConnection=newSqlConnection();
privateSqlCommandmyCommand=newSqlCommand();
privateSqlParametermyParameter=newSqlParameter();
存储过程名#region存储过程名
publicStringProcedureName
{
get
{
returnprocedureName;
}
set
{
procedureName=value;
}
}
#endregion
连接字符串#region连接字符串
publicStringConnectionString
{
get
{
returnconnectionString;
}
set
{
connectionString=value;
}
}
#endregion
构造函数#region构造函数
publicSQLProcHelper(){}
publicSQLProcHelper(StringProcedureName,StringConnectionString)
{
procedureName=ProcedureName;
connectionString=ConnectionString;
}
#endregion
调用存储过程#region调用存储过程
publicSqlResultCall(paramsobject[]parameters)
{
//SqlResult是自己定义的用于保存结果数据集、返回值、传出参数集的类
SqlResultresult=newSqlResult();
//根据需要定义自己的连接字符串
myConnection=newSqlConnection(ConnectionString);
myCommand=newSqlCommand(this.ProcedureName,myConnection);
myCommand.CommandType=CommandType.StoredProcedure;
SqlDataAdaptermyAdapter=newSqlDataAdapter(myCommand);
myConnection.Open();
//获得和创建存储过程的参数,并且设置好值
GetProcedureParameter(parameters);
myAdapter.Fill(result.MyDataSet,"Table");
//获得存储过程的传出参数值和名字对,保存在一个Hashtable中
GetOutputValue(result);
//在这里释放各种资源,断开连接
myAdapter.Dispose();
myCommand.Dispose();
myConnection.Close();
myConnection.Dispose();
returnresult;
}
#endregion
获得存储过程的参数#region获得存储过程的参数
privatevoidGetProcedureParameter(paramsobject[]parameters)
{
SqlDataReaderreader=null;
try
{
SqlCommandmyCommand2=newSqlCommand();
myCommand2.Connection=this.myConnection;
myCommand2.CommandText="selectPARAMETER_NAME,PARAMETER_MODE,DATA_TYPEfromINFORMATION_SCHEMA.PARAM
ETERSwhereSPECIFIC_NAME='"+this.ProcedureName+"'orderbyORDINAL_POSITION";
reader=myCommand2.ExecuteReader();
//创建返回参数
myParameter=newSqlParameter();
myParameter.ParameterName="@Value";
myParameter.SqlDbType=SqlDbType.Int;
myParameter.Direction=ParameterDirection.ReturnValue;
myCommand.Parameters.Add(myParameter);
inti=0;
//创建各个参数,在这个地方可以自动的创建SqlParameter的类型,值,方向等属性
while(reader.Read())
{
myParameter=newSqlParameter();
myParameter.ParameterName=reader["PARAMETER_NAME"].ToString();
myParameter.Direction=reader["PARAMETER_MODE"].ToString()=="IN"?
ParameterDirection.Input:ParameterDirection.Output;
switch(reader["DATA_TYPE"].ToString().ToUpper())
{
case"NVARCHAR":
myParameter.SqlDbType=SqlDbType.NVarChar;
if(myParameter.Direction==ParameterDirection.Input)
{
myParameter.Value=(string)parameters[i];
}
break;
case"VARCHAR":
myParameter.SqlDbType=SqlDbType.VarChar;
if(myParameter.Direction==ParameterDirection.Input)
{
myParameter.Value=(string)parameters[i];
}
break;
case"BIT":
myParameter.SqlDbType=SqlDbType.Bit;
if(myParameter.Direction==ParameterDirection.Input)
{
myParameter.Value=(bool)parameters[i];
}
break;
case"BIGINT":
myParameter.SqlDbType=SqlDbType.BigInt;
if(myParameter.Direction==ParameterDirection.Input)
{
myParameter.Value=(int)parameters[i];
}
break;
case"CHAR":
myParameter.SqlDbType=SqlDbType.Char;
if(myParameter.Direction==ParameterDirection.Input)
{
myParameter.Value=(string)parameters[i];
}
break;
case"DATETIME":
myParameter.SqlDbType=SqlDbType.DateTime;
if(myParameter.Direction==ParameterDirection.Input)
{
myParameter.Value=(DateTime)parameters[i];
}
break;
case"DECIMAL":
myParameter.SqlDbType=SqlDbType.Decimal;
if(myParameter.Direction==ParameterDirection.Input)
{
myParameter.Value=(Decimal)parameters[i];
}
break;
case"FLOAT":
myParameter.SqlDbType=SqlDbType.Float;
if(myParameter.Direction==ParameterDirection.Input)
{
myParameter.Value=(float)parameters[i];
}
break;
//case"IMAGE":
//myParameter.SqlDbType=SqlDbType.Image;
//break;
case"INT":
myParameter.SqlDbType=SqlDbType.Int;
if(myParameter.Direction==ParameterDirection.Input)
{
myParameter.Value=(int)parameters[i];
}
break;
case"MONEY":
myParameter.SqlDbType=SqlDbType.Money;
if(myParameter.Direction==ParameterDirection.Input)
{
myParameter.Value=(Decimal)parameters[i];
}
break;
case"NCHAR":
myParameter.SqlDbType=SqlDbType.NChar;
if(myParameter.Direction==ParameterDirection.Input)
{
myParameter.Value=(string)parameters[i];
}
break;
case"NTEXT":
myParameter.SqlDbType=SqlDbType.NText;
if(myParameter.Direction==ParameterDirection.Input)
{
myParameter.Value=(string)parameters[i];
}
break;
case"REAL":
myParameter.SqlDbType=SqlDbType.Real;
if(myParameter.Direction==ParameterDirection.Input)
{
myParameter.Value=(Double)parameters[i];
}
break;
case"TEXT":
myParameter.SqlDbType=SqlDbType.Text;
if(myParameter.Direction==ParameterDirection.Input)
p
浙公网安备 33010602011771号