2015-06-22 35 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; 
     } 
相關問題