下面是我用sqldataadapter和sqldatareader一起使用,但是执行的时候提示下面的错误,
{System.InvalidOperationException: 已有打开的与此命令相关联的 DataReader,必须首先将它关闭。这些是我写的代码
SqlDataAdapter adapter = new SqlDataAdapter();
SqlDataReader dr;
string connectionString = ConfigurationManager.ConnectionStrings["CRCS_ConnnectionString"].ConnectionString;
SqlConnection connection = new SqlConnection(connectionString);
try
{
connection.Open();
adapter.SelectCommand = new SqlCommand("Ownn_GetResourceName", connection);
adapter.SelectCommand.CommandType = CommandType.StoredProcedure;
dr = adapter.SelectCommand.ExecuteReader();
string[] typeid = type.Split(new char[] { ',' });
while (dr.Read())
{
for (int i = 0; i < typeid.Length; i++)
{
if (dr["ID"].ToString() == typeid[i].ToString())
{
DataTable tb = new DataTable();
adapter.Fill(tb);
this.ResourceType.DataSource = tb;
this.ResourceType.DataBind();
}
}
}
}
{System.InvalidOperationException: 已有打开的与此命令相关联的 DataReader,必须首先将它关闭。这些是我写的代码
SqlDataAdapter adapter = new SqlDataAdapter();
SqlDataReader dr;
string connectionString = ConfigurationManager.ConnectionStrings["CRCS_ConnnectionString"].ConnectionString;
SqlConnection connection = new SqlConnection(connectionString);
try
{
connection.Open();
adapter.SelectCommand = new SqlCommand("Ownn_GetResourceName", connection);
adapter.SelectCommand.CommandType = CommandType.StoredProcedure;
dr = adapter.SelectCommand.ExecuteReader();
string[] typeid = type.Split(new char[] { ',' });
while (dr.Read())
{
for (int i = 0; i < typeid.Length; i++)
{
if (dr["ID"].ToString() == typeid[i].ToString())
{
DataTable tb = new DataTable();
adapter.Fill(tb);
this.ResourceType.DataSource = tb;
this.ResourceType.DataBind();
}
}
}
}
------------------------------------------------------------------
用dataset
while (dr.Read())
{
for (int i = 0; i < typeid.Length; i++)
{
if (dr["ID"].ToString() == typeid[i].ToString())
{
DataSet set = new DataSet();
adapter.Fill(set);
this.ResourceType.DataSource = set.Tables[0];
this.ResourceType.DataBind();
}
}
}
SqlDataAdapter adapter = new SqlDataAdapter();
DataSet set = new DataSet();
string connectionString = ConfigurationManager.ConnectionStrings["CRCS_ConnnectionString"].ConnectionString;
SqlConnection connection = new SqlConnection(connectionString);
try
{
connection.Open();
adapter.SelectCommand = new SqlCommand("Ownn_GetResourceName", connection);
adapter.SelectCommand.CommandType = CommandType.StoredProcedure;
//dr = adapter.SelectCommand.ExecuteReader();
adapter.Fill(set);
string[] typeid = type.Split(new char[] { ',' });
while (dr.Read())-----这里的循环应该怎么样来实现?
{
for (int i = 0; i < typeid.Length; i++)
{
if (dr["ID"].ToString() == typeid[i].ToString())
{
DataTable tb = new DataTable();
adapter.Fill(tb);
this.ResourceType.DataSource = tb;
this.ResourceType.DataBind();
}
}
for (int j = 0; j < set.Tables[0].Rows.Count; j++)
{
for (int i = 0; i < typeid.Length; i++)
{
DataTable tb = set.Tables[0];
if (typeid[i].ToString() == set.Tables[0].Rows[j]["ID"].ToString())
{
this.ResourceType.DataSource = tb;
this.ResourceType.DataBind();
}
}
}