目前这是我们从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();
}
}
}
}
这个方法的问题是它很慢,当用户选择多个项目文件或文化时它无法成功创建表,在这种情况下显示数据的更好方法是什么?
答案 0 :(得分:1)
失败发生在2个(可能是3个)原因:
不要将实例成员用作SQL连接。将所有代码包装在
中using(SqlConnection conn = new SqlConnection(myConnectionString)
每次重建最里面循环内的SqlCommand
。
看起来您要将多个调用中的每个数据集重新绑定到同一个数据视图。我对这些经验不多。我通常使用reader["myField"]
并构造本地对象,因此这可能不是问题。