Dataaccess在三层asp.net架构中提供帮助

时间:2012-03-31 06:36:57

标签: asp.net sql-server-2008

我有DAL功能

 public DataTable executeSelectQuery(String _query, SqlParameter[] sqlParameter)
    {
        SqlCommand myCommand = new SqlCommand();
        DataTable dataTable = new DataTable();
        dataTable = null;
        DataSet ds = new DataSet();
        try
        {
            myCommand.Connection = openConnection();
            myCommand.CommandText = _query;
            myCommand.Parameters.AddRange(sqlParameter);
            myCommand.ExecuteNonQuery();                
            myAdapter.SelectCommand = myCommand;
            myAdapter.Fill(ds);
            dataTable = ds.Tables[0];
        }
        catch (SqlException e)
        {
            Console.Write("Error - Connection.executeSelectQuery - Query: 
        " + _query + " \nException: " + e.StackTrace.ToString());
            return null;
        }
        finally
        {

        }
        return dataTable;
    }

点击我的按钮

public void save_click(object sender,EventArgs e)
{
    try
    {

        string query = "Insert into customer_master(customer_title,customer_name)values(@parameter1,@parameter2)";
        SqlParameter[] sqlparam = new SqlParameter[2];
        sqlparam[0] = new SqlParameter("@parameter1", SqlDbType.VarChar, 50);
        sqlparam[0].Value = ddl_title.SelectedValue;

        sqlparam[1] = new SqlParameter("@parameter2", SqlDbType.VarChar, 50);
        sqlparam[1].Value = txt_group_name.Text;

         string id = ms.insert(query, sqlparam);
         catch(Exception ex)
         {
          throw ex;
          }

         }

我希望按钮单击函数值不作为sqlparameter传递,而是作为sql命令对象传递。如何使用sqlcommand对象而不是sqlparameter执行此操作。

1 个答案:

答案 0 :(得分:0)

为什么要传递SqlCommand个对象?我不认为这是对当前代码的改进 - 恰恰相反!

您的UI代码实际上只应将传递给DAL函数 - 只需List<int>或两个字符串或其他内容。 DAL应该执行所有与数据库相关的操作,例如创建SqlCommandSqlParameters

所以在你的情况下,我会在你的DAL上有一个方法InsertCustomer

public void InsertCustomer(string customerName, string customerTitle)
{
  .... // do all the DB stuff here - create SqlCommand, fill in SqlParameter,
       // execute the query
}

你的UI代码应该这样调用:

MyDAL dal = new MyDAL();
dal.InsertCustomer(txt_group_name.Text, ddl_title.SelectedValue);

在UI代码层中应该有无痕迹的ADO.NET类或函数!因此,不要在UI层中创建SqlCommand甚至SqlParameter - 将其封装在DAL层中!这就是它的用途!