更有效的方法在sql server上显示c#上的大量数据?

时间:2014-07-03 15:59:36

标签: c# sql sql-server

目前这是我们从sql server显示数据表的方法,存储在服务器中的表有几列包括ProjectFile和Culture,我们只想用用户指定的projectfile和culture显示数据:

private void showData(string[] selectedProject, string[] selectedCulure)
 {
        //the sql procedure will select data of specific culture and projectfile from table,it has two parameters:@culture and @projectfile
        SqlCommand com = new SqlCommand("PROCEDURE_GETData", m_conn);
        com.CommandType = CommandType.StoredProcedure;
        for (int i = 0; i < selectedProject.Length; i++)
        {
            com.Parameters.Add("@ProjectFile", SqlDbType.NVarChar).Value =   selectedProject[i];
            for (int m = 0; m < selectedCulure.Length; m++)
            {
                com.Parameters.Add("@Culture", SqlDbType.NVarChar).Value = selectedCulure[m];

                try
                {
                    m_conn.Open();
                    dataView.DataSource = com.ExecuteReader();
                    dataView.DataBind();
                    if (dataView.Rows.Count == 0)
                    {
                        dataView.EmptyDataText = "No data found, please select another project or culture. ";
                        dataView.DataBind();
                    }
                }
                catch (Exception ex)
                {
                    Response.Write("Error Occur: " + ex.ToString());
                }
                finally
                {
                    m_conn.Close();
                    m_conn.Dispose();
                }
            }
        }
    }

这个方法的问题是它很慢,当用户选择多个项目文件或文化时它无法成功创建表,在这种情况下显示数据的更好方法是什么?

1 个答案:

答案 0 :(得分:1)

失败发生在2个(可能是3个)原因:

  1. 不要将实例成员用作SQL连接。将所有代码包装在

    using(SqlConnection conn = new SqlConnection(myConnectionString)
    
  2. 每次重建最里面循环内的SqlCommand

  3. 看起来您要将多个调用中的每个数据集重新绑定到同一个数据视图。我对这些经验不多。我通常使用reader["myField"]并构造本地对象,因此这可能不是问题。