按书中教材写了一个访问数据库的方法:
//执行带参数的存储过程
public static DataSet SelectProc(string strProcName, string[] sqlParamsName, SqlDbType[] sqlParamsType, int[] sqlParamsSize, string[] sqlParamsValue)
{
SqlConnection sqlcon = new SqlConnection(strConnection);
SqlCommand sqlcmd = new SqlCommand();
DataSet dsTemp = new DataSet();
SqlDataAdapter sqlad = new SqlDataAdapter();
int intCounter;
sqlcon.Open();
sqlcmd.Connection = sqlcon;
sqlcmd.CommandType = CommandType.StoredProcedure;
sqlcmd.CommandText = strProcName;
for (intCounter = 0; intCounter < sqlParamsName.Length; intCounter++)
{
sqlcmd.Parameters.Add(sqlParamsName[intCounter],sqlParamsType[intCounter],sqlParamsSize[intCounter]).Value=sqlParamsValue[intCounter];
}
sqlad.SelectCommand = sqlcmd;
sqlad.Fill(dsTemp);
sqlad.Dispose();
sqlcmd.Dispose();
sqlcon.Close();
sqlcon.Dispose();
return dsTemp;
}调用的时候使用以下代码:
string[] procParamsName = { "@username" };
SqlDbType[] procParamsType = { SqlDbType.VarChar };
int[] procParamsSize = { 12 };
string[] procParamsValue = { "Kennethc" }; GridView1.DataSource = dbcon.SelectProc("selectabc",procParamsName,procParamsType,procParamsSize,procParamsValue);
GridView1.DataBind();也就是说每次调用的时候都必须定义四个数组,感觉比较麻烦,也不直观,想能将这四个数组定义为一个类或结构什么的,这样定义起来比较简单。
比如定义的时候可以采用类似以下的方法:
ProcParamers newproc = new ProcParamers();
newproc.addParamers("@username",SqlDbType.VarChar,12,"Kennethc");
GridView1.DataSource = dbcon.SelectProc("selectabc",newproc);
GridView1.DataBind();请问如何实现比较好?怎样定义这个类(或结构?)?
//执行带参数的存储过程
public static DataSet SelectProc(string strProcName, string[] sqlParamsName, SqlDbType[] sqlParamsType, int[] sqlParamsSize, string[] sqlParamsValue)
{
SqlConnection sqlcon = new SqlConnection(strConnection);
SqlCommand sqlcmd = new SqlCommand();
DataSet dsTemp = new DataSet();
SqlDataAdapter sqlad = new SqlDataAdapter();
int intCounter;
sqlcon.Open();
sqlcmd.Connection = sqlcon;
sqlcmd.CommandType = CommandType.StoredProcedure;
sqlcmd.CommandText = strProcName;
for (intCounter = 0; intCounter < sqlParamsName.Length; intCounter++)
{
sqlcmd.Parameters.Add(sqlParamsName[intCounter],sqlParamsType[intCounter],sqlParamsSize[intCounter]).Value=sqlParamsValue[intCounter];
}
sqlad.SelectCommand = sqlcmd;
sqlad.Fill(dsTemp);
sqlad.Dispose();
sqlcmd.Dispose();
sqlcon.Close();
sqlcon.Dispose();
return dsTemp;
}调用的时候使用以下代码:
string[] procParamsName = { "@username" };
SqlDbType[] procParamsType = { SqlDbType.VarChar };
int[] procParamsSize = { 12 };
string[] procParamsValue = { "Kennethc" }; GridView1.DataSource = dbcon.SelectProc("selectabc",procParamsName,procParamsType,procParamsSize,procParamsValue);
GridView1.DataBind();也就是说每次调用的时候都必须定义四个数组,感觉比较麻烦,也不直观,想能将这四个数组定义为一个类或结构什么的,这样定义起来比较简单。
比如定义的时候可以采用类似以下的方法:
ProcParamers newproc = new ProcParamers();
newproc.addParamers("@username",SqlDbType.VarChar,12,"Kennethc");
GridView1.DataSource = dbcon.SelectProc("selectabc",newproc);
GridView1.DataBind();请问如何实现比较好?怎样定义这个类(或结构?)?
DbParameterCollection
SqlParameterCollection
OleDbParameterCollection
...但他们的构造器,不是 public,也就是我们无法实例化,由相应的 xxxCommand 创建之,你可以用 Reflector 反射 System.Data.dll 查看其源码,理解其实现
{
public string parName;
public SqlDbType parType;
public int parSize;
public object parValue;
}然后使用 ParaInfo[];
或使用List<ParaInfo>
先定义一个结构: public struct SqlParamsInfo
{
public string ParamsName;
public SqlDbType ParamsType;
public int ParamsSize;
public object ParamsValue; public SqlParamsInfo(string pName, SqlDbType pType, int pSize, object pValue)
{
ParamsName = pName;
ParamsType = pType;
ParamsSize = pSize;
ParamsValue = pValue;
}
}
定义参数:
SqlParamsInfo[] sqlParams = new SqlParamsInfo[1];
sqlParams[0] = new SqlParamsInfo("@username", SqlDbType.VarChar, 12, "Kennethc");
GridView1.DataSource = dbcon.SelectProc("selectabc", sqlParams);
GridView1.DataBind();