最佳实践代码和问题

时间:2012-03-27 03:31:31

标签: c# asp.net

我是初学者并编写代码以使用Asp.Net和c#在Gridview中显示数据。我想知道我所遵循的方法是否正确。我想要标准和架构问题的建议,我的代码的最佳实践,以便我可以相应地修改我的代码。感谢您提出的很棒的建议和代码。

连接代码:

    public class DemoProjConnectionClass
    {
        public SqlConnection DemoProjConnection()
        {
            SqlConnection con = new SqlConnection("Data Source=Localhost;Initial Catalog=master;Integrated Security=True");
            return con;
        }
    }

域代码(获取和设置):

public class DemoProjDomainClass
{

public int EmpId { get; set; } 
public string EmpName { get; set; } 
public int Salary { get; set; } 

 } 

类库代码:

public class DemoProjServiceClass
{
    public IList<DemoProjDomainClass> getDemoProjList()
    {
        string sqlDemoProjList;
        sqlDemoProjList = "SELECT EmpId,EmpName,Salary from Employee";
        DemoProjConnectionClass x = new DemoProjConnectionClass();
        SqlConnection con = x.DemoProjConnection();
        con.Open();
        SqlCommand cmd = new SqlCommand(sqlDemoProjList, con);
        cmd.CommandType = CommandType.Text;
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        DataSet ds = new DataSet();
        da.Fill(ds, "tempTable1");



        IList<DemoProjDomainClass> DemoProjList = new List<DemoProjDomainClass>();
        for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
        {
            DemoProjDomainClass _obj = new DemoProjDomainClass();

            _obj.EmpId = Convert.ToInt16(ds.Tables[0].Rows[i][0]);_obj.EmpName = ds.Tables[0].Rows[i][1].ToString();_obj.Salary = Convert.ToInt16(ds.Tables[0].Rows[i][2]);DemoProjList.Add(_obj);
        }
        return DemoProjList;
    }
} 

用户界面代码

protected void Page_Load(object sender, EventArgs e)
{
   DemoProjServiceClass ob=new DemoProjServiceClass();
    GridView1.DataSource = ob.getDemoProjList();
    GridView1.DataBind();

}

5 个答案:

答案 0 :(得分:5)

我建议你:

  1. 使用MVC代替asp.net classic
  2. 使用linq或EntityFramework代替(cmd,conn,adapter,dataset)
  3. 使用转发器代替网格以获得更高性能
  4. 在asp.net网站上查看此tutorial

答案 1 :(得分:3)

连接代码:

我不会像这样对连接字符串进行硬编码。我会将它保存在配置文件(web.config或者......)中并从那里读取,以便我可以随时根据需要重新编译来更改连接字符串。

类库代码

您的getDemoProjList方法没有任何异常处理。我将使用using语句包装该代码,以便我不必担心关闭我的连接

<强> UI

我不认为您应该在PageLoad中加载数据而不检查它是否是回发。因此将使用isPostBAck属性checkk。我还会在将其绑定为网格的数据源之前进行空检查。

protected void Page_Load(object sender, EventArgs e)
{
  if (!IsPostBack)
  {
    DemoProjServiceClass ob=new DemoProjServiceClass();
    List<DemoProjDomainClass> objList=ob.getDemoProjList();
    if(objList!=null)
    {
       GridView1.DataSource = objList;
       GridView1.DataBind();
    }
   }

}

答案 2 :(得分:1)

不是真的。 从这个角度来看,您需要的是数据访问层。 http://martinfowler.com/eaaCatalog/ 使用数据源架构模式项。 关于代码连接,大部分时间不应该硬编码,而是在某种配置文件中定义。 让我们假设Domain很好,但是大部分时间你需要实现Domain模式,如果你有一些域模型的额外逻辑,那么在目录中也会有更多描述。 由于可能的SQL注入,避免对sql查询进行硬编码,在适当的地方使用Disposable模式(在C#开发方面使用“using”关键字)。对于主要情况,ORM可以很好地完成基本功能甚至更多,因此使用SqlCommand只有两个很好的理由: 当您获得最佳表现或学习基础知识时。也有缺点。您的可维护性降低,代码量增加。 从我的预期ASP.Net MVC为您提供高度可维护和可配置的代码级别。这就是为什么你真的可以关注它。但这取决于你是否这样做。

答案 3 :(得分:0)

对于您的连接代码,将SqlConnection括号内的所有内容移动到您的webconfig中,如下所示:

<connectionStrings> <add name="abcConnectionString" connectionString="Data Source=Localhost;Initial Catalog=master;Integrated Security=True providerName="System.Data.SqlClient" /> </connectionStrings> 然后在你的代码中引用它:

using System.Configuration;

string connStr = ConfigurationManager.ConnectionStrings["abcConnectionString"].ConnectionString;
        SqlConnection Con = new SqlConnection(connStr);

答案 4 :(得分:0)

使用Enterprise库处理您的数据访问代码。