2015-06-22 37 views
1

我有多个函数仅从数据库中提取数据。该函数之间的区别是存储过程名称(uspLoadStudents,uspLoadMarks)。要进行优化,将其作为一项功能并通过SP。如何在DAL中传递存储过程名称作为参数

public DataSet LoadSubjects() 
{ 
    string SqlDBConnection = Utils.GetConnectionString(); 
    DataSet ds = new DataSet(); 
    SqlConnection sqlConn = new SqlConnection(SqlDBConnection); 
    SqlCommand sqlCmd = new SqlCommand("uspLoadSubjects", sqlConn); 
    sqlCmd.CommandType = CommandType.StoredProcedure; 
    sqlConn.Open(); 
    DataTable dt = new DataTable(); 
    dt.Load(sqlCmd.ExecuteReader()); 
    ds.Tables.Add(dt); 
    sqlConn.Close(); 
    return ds; 
} 
+0

是否有任何的存储过程采用参数?如果没有,@ FelipeOriani拥有最好的解决方案,正确处理对象。 – Icemanind

回答

0

像SQL命令,存储过程的名称信息,应该是你Data Access Layer的一部分,取而代之的则是数据访问层内helper class。试试这个:

public static class DALHelper 
{ 
    public static DataSet ExecuteProcedure(string procedureName) 
    { 
     string sqlDBConnection = Utils.GetConnectionString();  
     DataSet ds = new DataSet(); 

     using (SqlConnection sqlConn = new SqlConnection(sqlDBConnection)) 
     { 
      using(SqlCommand sqlCmd = new SqlCommand(procedureName, sqlConn)) 
      { 
       sqlCmd.CommandType = CommandType.StoredProcedure; 
       try 
       { 
        sqlConn.Open(); 

        using (var adapter = new SqlDataAdpter(sqlCmd)) 
        { 
         adapter.Fill(ds); 
        }    
       } 
       catch 
       { 
        throw; 
       } 
       finally 
       { 
        sqlConn.Close(); 
       } 
      } 
     } 

     return ds; 
    } 
} 

实现方法来使用这个帮手,样品:

public DataSet LoadSubjects() 
{ 
    return DALHelper.ExecuteProcedure("uspLoadStudents"); 
} 
+0

谢谢菲利普。我会尝试与SProcs一起使用参数值。 – Krish

0

This?

public DataSet ExecProc(string procName) 
{ 
    string SqlDBConnection = Utils.GetConnectionString(); 
    DataSet ds = new DataSet(); 
    SqlConnection sqlConn = new SqlConnection(SqlDBConnection); 
    SqlCommand sqlCmd = new SqlCommand(procName, sqlConn); 
    sqlCmd.CommandType = CommandType.StoredProcedure; 
    sqlConn.Open(); 
    DataTable dt = new DataTable(); 
    dt.Load(sqlCmd.ExecuteReader()); 
    ds.Tables.Add(dt); 
    sqlConn.Close(); 
    return ds; 
} 
0

试试这个

public static DataSet getDataSet(string sp_name, string[] param_names, object[] param_values) 
     { 
      SqlDataAdapter sqlda = new SqlDataAdapter(); 
      SqlCommand sqlcmd = new SqlCommand(); 
      DataSet set = new DataSet(); 
      try 
      { 
       sqlcmd.Connection = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString); 
       sqlcmd.CommandType = CommandType.StoredProcedure; 
       sqlcmd.CommandText = sp_name;       
       sqlda.SelectCommand = sqlcmd; 
       sqlda.Fill(set); 
      } 
      catch (Exception ex) 
      { 

      } 
      finally 
      { 
       if (sqlcmd.Connection.State == ConnectionState.Open) 
        sqlcmd.Connection.Close(); 
      } 
      return set; 
     } 
相关问题