У вас есть разумная идея, пока вы не дойдете до точки, где вы пытаетесь создать вторую SqlCommand. То есть после того, как вы выполните Fill, у вас уже есть данные в таблице. Вы не запускаете другой выбор - вы уже сделали это. Вы просто ссылаетесь на таблицу, которую хотите использовать в наборе данных.
Если вы хотите таблицу данных, вы бы сделали что-то вроде этого (для VB, см. Ниже):
SqlDataAdapter myAdapter = new SqlDataAdapter(CommandText, con);
DataSet myDataset = new DataSet();
myAdapter.Fill(myDataset, "Table"); // "Table" is just a name, it can be anything.
mydatatable1 = myDataset.Tables[0]; // Get the table
Теперь, если вам не нужна DataTable сама по себе, но вы просто хотите прочитать из запроса, вы должны использовать SqlDataReader:
cmd = new SqlCommand(CommandText, con);
// One or more params
cmd.Parameters.AddWithValue("@paramName", Value);
SqlDataReader nwReader = cmd.ExecuteReader();
Тогда просто прочитайте из nwReader:
while (nwReader.Read())
{
string field1Val = (string)nwReader["FieldName"];
etc...
}
Обновление : я не знаю VB, но вот что я думаю это будет выглядеть так:
cmd = New SqlCommand("Select * from table1", con)
ada = New SqlDataAdapter(cmd)
ds = New DataSet
ada.Fill(ds)
mydatatable1 = ds.Tables(0);
Вы вполне можете сократить это, чтобы избавиться от дополнительной SqlCommand (при условии, что VB поддерживает этот синтаксис SqlDataAdapater, такой как C #.
ada = New SqlDataAdapter("Select * from table1", con)
ds = New DataSet
ada.Fill(ds)
mydatatable1 = ds.Tables(0);
Удачи ...