iratus7 Ответов: 4

Объединить и связать двух SQL-запросов в одном GridView в


Привет. Я хочу связать два разных источника данных sql в одном Gridview.
Это то, что стоит за кодом c# :

protected void Page_Load(object sender, EventArgs e)
    {
        //Establishing the MySQL Connection
        SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["BasketballConnectionString1"].ToString());
        string query, query2;
        SqlCommand SqlCommand, SqlCommand2;
        SqlDataReader reader, reader2;

        SqlDataAdapter adapter = new SqlDataAdapter();
        SqlDataAdapter adapter2 = new SqlDataAdapter();
        //Open the connection to db
        conn.Open();

        //Generating the query to fetch the contact details
        query = "SELECT blah1 blah1 blah1";
        query2 = "SELECT blah2 blah2 blah2";
        SqlCommand = new SqlCommand(query, conn);
        adapter.SelectCommand = new SqlCommand(query, conn);
        SqlCommand2 = new SqlCommand(query2, conn);
        adapter.SelectCommand = new SqlCommand(query2, conn);
        //execute the query
        reader = SqlCommand.ExecuteReader();
        reader2 = SqlCommand2.ExecuteReader();
        //Assign the results 
        GridView4.DataSource = reader;
        GridView4.DataSource = reader2;
        //Bind the data
        GridView4.DataBind();
        conn.Close();
        //------------------------------------------------------------
    }

и это ошибка, которую я принимаю:
"С этой командой уже связан открытый DataReader, который должен быть закрыт в первую очередь."
Есть ли какие-либо предложения,как использовать оба двух sql-запроса(query, query2)?

4 Ответов

Рейтинг:
36

iratus7

это кажется лучшим решением для повышения производительности

Рейтинг:
21

♥…ЯҠ…♥

Привет Иратус7,

Поскольку вы указываете на одну и ту же базу данных, вы можете использовать функцию объединить два запроса в один запрос, извлечь его и привязать к источнику данных.
Это будет легко для вас.
Нравится select B1.blah1,B2.blah2 from blah1 B1,blah2 B2

Используйте приведенный ниже код вместо вашего

protected void Page_Load(object sender, EventArgs e)
    {
        //Establishing the MySQL Connection
        SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["BasketballConnectionString1"].ToString());
        string query;
        SqlCommand SqlCommand;
        SqlDataReader reader;
 
        SqlDataAdapter adapter = new SqlDataAdapter();
        //SqlDataAdapter adapter2 = new SqlDataAdapter();
        //Open the connection to db
        conn.Open();
 
        //Generating the query to fetch the contact details
        query = "select B1.blah1,B2.blah2 from blah1 B1,blah2 B2";
        //query2 = "SELECT blah2 blah2 blah2";
        SqlCommand = new SqlCommand(query, conn);
        adapter.SelectCommand = new SqlCommand(query, conn);
        //SqlCommand2 = new SqlCommand(query2, conn);
        //adapter.SelectCommand = new SqlCommand(query2, conn);
        //execute the query
        reader = SqlCommand.ExecuteReader();
        //reader2 = SqlCommand2.ExecuteReader();
        //Assign the results 
        GridView4.DataSource = reader;
        //GridView4.DataSource = reader2;
        //Bind the data
        GridView4.DataBind();
        conn.Close();
        //------------------------------------------------------------
    }


Надеюсь, это вам немного поможет.

С уважением,
РК


iratus7

Это сложная база данных и есть проблема объединить эти два запроса

♥…ЯҠ…♥

это не так сложно, как ваш код на C#, попробуйте его оптимизировать. Попробуйте и вернитесь с вашим запросом... в этом мы вам тоже поможем.

iratus7

да, я объединяю запросы, используя три новых представления в своей базе данных.Я не знаю, есть ли проблема с производительностью

Рейтинг:
2

Member 13619556

С этой командой уже связан открытый DataReader, который должен быть закрыт первым, для этой ошибки вы должны вставить multipleActiveResultSets=true в вашу строку подключения.
например:"источник данных=имя сервера;начальный каталог=имя базы данных;идентификатор пользователя=ХХ;пароль=ХХ;значение multipleactiveresultsets=true в"

надеюсь, это вам поможет


CHill60

Вопрос имеет не только 1, но и два принято решения более чем 4-летней давности. Придерживайтесь ответов на новые вопросы, где ОП все еще нуждается в помощи.
И если вы собираетесь предложить такие вещи, как Марс, по крайней мере, сообщите оператору о возможных последствиях ... например, Марс не является потокобезопасным!

Рейтинг:
0

King Fisher

если это одно и то же имя столбца ,вы можете использовать UNION


СОЮЗ