关于数据访问类的疑惑
我想自己写一个简单的数据访问类,用于自己开发的程序。由于对数据访问不太熟悉,想请各位指教。
对于带有许多条件的sql语句,该如何处理?有时候条件只有一个,有时候有10几个,都是用来选择数据的,因此查询语句,返回格式都一样,我想用一个通用的方法来实现,请问,查询参数该如何处理?比如:
1、select a,b,c from t where a= "1 "
2、select f,g,h,k from v where f= "2 " and g= "3 "
返回的是dataset,
function GetDataset1(byval TJ as integer) as Dataset
dim sql as string= "select .. "
dim ds as new dataset
dim sda as new sqldataadapter(sql,dbConn)
sda.selectcommand.parameters.add(new sqlparameter( "@a ",sqldbtype.int)
sda.selectcommand.parameters( "@a ").value= "TJ
...
sda.fill(ds, "a ")
GetDataset1=ds
end Function
function GetDataset2(byval TJ as integer) as Dataset
dim sql as string= "select .. "
dim ds as new dataset
dim sda as new sqldataadapter(sql,dbConn)
sda.selectcommand.parameters.add(new sqlparameter( "@a ",sqldbtype.int)
sda.selectcommand.parameters( "@a ").value= "TJ
...
sda.fill(ds, "a ")
GetDataset2=ds
end Function
GetDataset1、GetDataset2 除了sql语句不同,条件数目不同,其余都一样。如何处理不同数目的条件?我不想一个一个来写,想写一个通用方法
------解决方案--------------------用param 修饰, 这个参数允许你传递一个以上的数据的参数
比如
void ExecMySql(SqlCommand cmd, param SqlParameter[] ps)
{
foreach(SqlParameter p in ps)
cmd.Parameters.Add....
}
调用的时候可以这样调,非常方便
ExecMySql(cmd, p1, p2, p3...任意多);
------解决方案--------------------写一个静态的数据访问函数全部参数都写字符串,配合一个存储过程来执行速度会快些,参数对外就自己写个防SQL注入攻击函数过滤一个字符串.
------解决方案--------------------例:
#region gettable通用查询
public DataTable getTable(string tableName, int page, int pageSize, string sortID, string fieldStr, string filter, string tablekey)
{
DataTable dt = new DataTable(tableName);
if (filter == null)
filter = " ";
if (sortID == null)
sortID = " ";
adapter.TableMappings.Clear();
adapter.TableMappings.Add( "Table ", dt.TableName);
adapter.SelectCommand = new SqlCommand( "Seek_All ", conn);
adapter.SelectCommand.CommandType = System.Data.CommandType.StoredProcedure;
adapter.SelectCommand.Parameters.AddWithValue( "@page ", page);
adapter.SelectCommand.Parameters.AddWithValue( "@count ", pageSize);
adapter.SelectCommand.Parameters.AddWithValue( "@Table ", tableName);
adapter.SelectCommand.Parameters.AddWithValue( "@SortId ", sortID);
adapter.SelectCommand.Parameters.AddWithValue( "@TableKey ", tablekey);
adapter.SelectCommand.Parameters.AddWithValue( "@FieldStr ", fieldStr);
adapter.SelectCommand.Parameters.AddWithValue( "@Condition ", filter);
adapter.Fill(dt);
return dt;
}
public DataTable getTable(string tableName, string sortID, string fieldStr, string filter)
{