关于多个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 ");