Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / как оптимальнее делать выборку из SQL Server? / 15 сообщений из 15, страница 1 из 1
28.04.2010, 10:48
    #36602331
Winnipuh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как оптимальнее делать выборку из SQL Server?
как оптимальнее делать в сервисе?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
 1 . 
using (SqlConnection con = new SqlConnection(connectionString))
                {
                command = new SqlCommand("dbo.get_data");
                    command.Connection = con.Connection;
                command.CommandType = CommandType.StoredProcedure;
///...
                using (SqlDataReader reader = command.ExecuteReader())
                {
                    if (!reader.HasRows)
                    {
                        return null;
                    }

                    while (reader.Read())
                    {
...
                    }
                 }
                }

 2 . 
SqlConnection oConn = new SqlConnection(); 
     DataTable oTable = new DataTable(); 
         
     try 
     {   
       oConn.ConnectionString =  "connection string";
       oConn.Open();       
       SqlDataAdapter oDA = new SqlDataAdapter("exec get_data",oConn); 
       oDA.Fill(oTable); 
       oConn.Close(); 
     } 
     catch (Exception e) {   }   
     finally{ if (oConn.State == ConnectionState.Open) { oConn.Close(); } } 

     // To Iterate Through Rows

     foreach(DataRow oRow in oTable.Rows) 
     {  
       Response.Write(oRow["username"].ToString()); 
     } 

...
Рейтинг: 0 / 0
28.04.2010, 11:04
    #36602374
Шайтан
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как оптимальнее делать выборку из SQL Server?
можно с ридера прямо в таблицу грузить
Код: plaintext
datatable.Load(sp.ExecuteReader(CommandBehavior.CloseConnection));
...
Рейтинг: 0 / 0
28.04.2010, 11:10
    #36602393
AlexeiK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как оптимальнее делать выборку из SQL Server?
Шайтан,

оптимальнее generic юзать вместо datatable)
...
Рейтинг: 0 / 0
28.04.2010, 11:14
    #36602411
Winnipuh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как оптимальнее делать выборку из SQL Server?
так все-таки вариант 2 предпочтительнее?
мне надо потом в массив или в лист грузить данные
...
Рейтинг: 0 / 0
28.04.2010, 11:22
    #36602440
Winnipuh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как оптимальнее делать выборку из SQL Server?
AlexeiKШайтан,

оптимальнее generic юзать вместо datatable)

какой generic?

мне после выборки надо заполнить свой объект полями из базы, т.е. сейчас я читаю из
ридера и заполняю поля объекта что-то типа

Код: plaintext
1.
2.
3.
myob.Name = r["name"].ToString();
myob.LengthSm = r["lensm"].ToString();
...


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

может DataSet ?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
private static DataSet SelectRows(DataSet dataset,
    string connectionString,string queryString) 
{
    using (SqlConnection connection = 
        new SqlConnection(connectionString))
    {
        SqlDataAdapter adapter = new SqlDataAdapter();
        adapter.SelectCommand = new SqlCommand(
            queryString, connection);
        adapter.Fill(dataset);
        return dataset;
    }
}
...
Рейтинг: 0 / 0
28.04.2010, 11:35
    #36602475
Шайтан
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как оптимальнее делать выборку из SQL Server?
AlexeiKШайтан,

оптимальнее generic юзать вместо datatable)
особенно если в требованиях к проекту FW 2.0
...
Рейтинг: 0 / 0
28.04.2010, 11:59
    #36602557
LR
LR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как оптимальнее делать выборку из SQL Server?
Winnipuh,

как оптимальнее?
1. SqlDataReader -> MyObj
2. SqlDataReader -> DataTable -> MyObj

смотря для чего... для разработки? для фунциклирования - понятно что 1
...
Рейтинг: 0 / 0
28.04.2010, 12:38
    #36602653
Winnipuh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как оптимальнее делать выборку из SQL Server?
LRWinnipuh,

как оптимальнее?
1. SqlDataReader -> MyObj
2. SqlDataReader -> DataTable -> MyObj

смотря для чего... для разработки? для фунциклирования - понятно что 1

мне надо , чтобы коннекция закрывалась как можно быстрее, данные можно и позже обработать.

Вот что интересно:
на выборке 1 млн записей, выбирается только поле uniqueidentifier, ф-ии 1 и 2 работают приблизительно 5 секунд, ф-ия 3 - рабоатет 3 секунды....
Правда, в ф-ии 3 пока нет внутри цикла создания объекта и заполнения его из ридера.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
//  1         
        private DataSet SelectRows(DataSet dataset,
            string connectionString, string queryString)
        {
            using (SqlConnection connection =
                new SqlConnection(connectionString))
            {
                SqlDataAdapter adapter = new SqlDataAdapter();
                adapter.SelectCommand = new SqlCommand(
                    queryString, connection);
                adapter.Fill(dataset);
                return dataset;
            }
        }
//  2 
        private DataTable SelectRows(DataTable datatable,
            string connectionString, string queryString)
        {
            using (SqlConnection connection =
                new SqlConnection(connectionString))
            {
                SqlDataAdapter adapter = new SqlDataAdapter();
                adapter.SelectCommand = new SqlCommand(
                    queryString, connection);
                adapter.Fill(datatable);
                return datatable;
            }
        }
//  3  
        private static List<Guid> SelectRowsReader(string connectionString, string queryString)
        {
            List<Guid> nodeList = new List<Guid>( 100000 );
            using (SqlConnection connection =
                new SqlConnection(connectionString))
            {
                connection.Open();
                SqlCommand command = new SqlCommand(queryString);
                command.Connection = connection;
                command.CommandType = CommandType.Text;
                using (SqlDataReader reader = command.ExecuteReader())
                {
                    if (!reader.HasRows)
                    {
                        return null;
                    }
                    while (reader.Read())
                    {
                        Guid guid = new Guid(reader["id"].ToString());
                        nodeList.Add(guid);
                    }
                }
                return nodeList;
            }
        }
...
Рейтинг: 0 / 0
28.04.2010, 12:50
    #36602700
LR
LR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как оптимальнее делать выборку из SQL Server?
Winnipuhмне надо , чтобы коннекция закрывалась как можно быстрее, данные можно и позже обработать.

Вот что интересно:
неудивительно, SqlDataReader -> MyObj всегда будет (всегда можно сделать) быстрее чем SqlDataReader -> DataTable
...
Рейтинг: 0 / 0
28.04.2010, 12:57
    #36602722
Winnipuh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как оптимальнее делать выборку из SQL Server?
LRWinnipuhмне надо , чтобы коннекция закрывалась как можно быстрее, данные можно и позже обработать.

Вот что интересно:
неудивительно, SqlDataReader -> MyObj всегда будет (всегда можно сделать) быстрее чем SqlDataReader -> DataTable

т.е. получается не смысла пытаться делать "disconnected recordset" на манер того, что в АДО, чтобы
коннект отключать как можно быстрее и помто обрабатывать даннные?
...
Рейтинг: 0 / 0
28.04.2010, 13:09
    #36602768
LR
LR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как оптимальнее делать выборку из SQL Server?
наверное, соотношения по скорости очевидны
SqlDataReader -> MyObj всегда будет (всегда можно сделать) быстрее чем SqlDataReader -> DataTable
SqlDataReader -> DataTable всегда будет (всегда можно сделать) быстрее (но тут, возможно, не намного) чем SqlDataAdapter.Fill
...
Рейтинг: 0 / 0
28.04.2010, 15:32
    #36603255
bured
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как оптимальнее делать выборку из SQL Server?
В первом посте баянистый вопрос: что быстрее ридер или адаптер.
Наверное ридер, но не сильно. Т.к. адаптер скрыто использует ридер.
В любом случае на веб-сервисе это не самое узкое место.
Так что Winnipuh, не занимайся ерундой.
...
Рейтинг: 0 / 0
28.04.2010, 17:28
    #36603700
Winnipuh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как оптимальнее делать выборку из SQL Server?
buredВ первом посте баянистый вопрос: что быстрее ридер или адаптер.
Наверное ридер, но не сильно. Т.к. адаптер скрыто использует ридер.
В любом случае на веб-сервисе это не самое узкое место.
Так что Winnipuh, не занимайся ерундой.

не то чтобы баянистый, но исходя из задачи поскорее закрывать коннект хотел убедиться, помню в АДО делал дисконнектнуыте рекордсеты, и коннекцию не держал.

После экспериментов убедился, что все *****, и что обычный ридер и даже набивание своих объектов в цикле по ридеру на 1млн записей все равно быстрее моделирования дисконнектнутости через адаптер и заполенения датасета или дататабле.
...
Рейтинг: 0 / 0
28.04.2010, 17:34
    #36603738
bured
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как оптимальнее делать выборку из SQL Server?
Это второй развесистый баян: нефиг тащить миллион записей на клиента (в смысле клиента SQL Server-а, и уж тем более тащить на клиента веб-сервиса просто безумие).
...
Рейтинг: 0 / 0
28.04.2010, 17:39
    #36603764
Winnipuh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как оптимальнее делать выборку из SQL Server?
buredЭто второй развесистый баян: нефиг тащить миллион записей на клиента (в смысле клиента SQL Server-а, и уж тем более тащить на клиента веб-сервиса просто безумие).

не продохнуть .
да на 1 млн это я в тестовом приложении время мерил, чтобы было заметно
...
Рейтинг: 0 / 0
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / как оптимальнее делать выборку из SQL Server? / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]