日期:2014-05-19  浏览次数:20431 次

关于多个Repeat控件与数据源绑定问题 【100分】
我用个cmd创建2个SqlDataReader,绑定2个repeat控件。结果提示错误。

分别用2个conn和2个cmd,再2个单独的reader可以绑定。但觉得效率很低。

请问如何在页面中,只使用1个conn和1个cmd就可以绑定。

或者说如何能效率最大化。

------解决方案--------------------
SqlConnection dbConn = new SqlConnection();
SqlCommand dbCmd = dbConn.CreateCommand();
System.Data.SqlClient.SqlDataReader reader ;

dbCmd.CommandText = "select * from abc ";
..
reader = dbCmd.ExecuteReader();
....
dbCmd.CommandText = "select * from bcd ";
..
reader = dbCmd.ExecuteReader();
....

------解决方案--------------------
使用DataTable保存数据,然后绑定。

不过,这是因为你是那种手工的绑定的原因。如果你使用sqlDataSource数据源控件,那么当然自己使用DataTable作为数据源不但不高效,写很多代码(假设你的代码没有问题的话)。

退一步说,你的做法效率低多少,你有具体的测试或者测试方法吗?帖出测试代码。
------解决方案--------------------
一个conn只能同时使用一个datareader 用DataTable吧。
------解决方案--------------------
SqlDbCommand dbcom=new SqlDbCommand ( "SQL语句 ; "+ "SQL语句 ",dbconn);
SqlDataReader dr=dbcom.ExecuteReader();


this.Repater1.DataSoucre=dr;
dr.NextResult();

this.Repater2.DataSoucre=dr;


dr.Close();
dbconn.Close();
}
------解决方案--------------------

你项目下所有的数据库操作类做一个基类嘛,每次都要创建conn和cmd多麻烦?

如:

public class Dbase
{
string _connectionString;
public Dbase(string connectionString)
{
_connectionString = connectionString;
}
public void Execute(string str)
{
SqlConnection conn = new SqlConnection(_connectionString);
SqlCommand cmd = new SqlCommand(str, conn);
try
{
conn.Open();
cmd.ExecuteNonQuery();
}
catch (SqlException e)
{
throw new Exception(e.Message);
}
finally
{
cmd.Dispose();
conn.Close();
}
}
public DataTable GetDataTable(string str)
{
SqlConnection conn = new SqlConnection(_connectionString);
DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter(str, conn);
try
{
conn.Open();
da.Fill(ds);
return ds.Tables[0];
}
catch (SqlException e)
{
throw new Exception(e.Message);
}
finally
{
da.Dispose();
conn.Close();
}
}

}
在这里定义:
public class SqlDataProvider
{
protected static Dbase _dbUtility = new Dbase( "Data Source=localhost;Initial Catalog=test;User ID=sa;password=sa ");
public static Dbase DbUtility
{
get { return _dbUtility; }
}
}

在其他地方就可以集中使用了..

如SqlDataProvider.DbUtility.GetDataTable( "select * from table1 ");