xmouse

导航

存储过程调用类

于是我写了代码完成了此功能.代码中有两个类

一个是用来做返回值的载体的用一个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

posted on 2005-01-26 09:48  xmouse  阅读(847)  评论(0)    收藏  举报