2017-01-17 16 views
0

В моей базе данных доступа было 700 записей, каждая запись имела 50 полей. Я использую ODBC Query of PHP, скорость запросов которой очень быстрая, но я использую ODBC Query of C#, скорость очень медленно, коды ниже:C# ODBC Query очень медленно

m_conn = new OdbcConnection("DSN=real");//This DSN set by through the windows control panel,ODBC manager,system dsn 
m_conn.Open(); 
string sqlstr="select * from table1 where id = 1"; 
OdbcCommand selectCMD = new OdbcCommand(sqlstr, m_conn); 
OdbcDataReader myreader; 
myreader = selectCMD.ExecuteReader(); 
if (myreader == null) 
    return null; 
string s =myreader["field"].ToString();//here,execution speed is very slow,why? 

спасибо за помощь

ответ

0

не выбирайте больше данных для приложения, чем вам нужно обработать.

Ваше заявление select * from table1 where id = 1 выбирает все поля. Если вам нужно только поле с именем field, то измените ваш оператор выбора на select field from table1 where id = 1.

Если вы предоставляете дополнительную информацию о вашей структуре базы данных, я могу быть в другом месте.

+0

Моя структура базы данных ниже:

48 float fields, 1 char 64 fields, 1 id of AUTO_INCREMENT field.
Мне нужно это все поля, но я испытываю такое же оператор запроса на ODBC-запрос РНР, его скорость очень быстро. –

0

Здесь есть несколько предложений. Я предполагаю, что вы несколько раз обращаетесь к этому коду, в который входит медленность. Это, скорее всего, вызвано неправильным использованием/закрытием соединений. Ниже приведен код, реорганизованный с помощью предложения use, которое принудительно использует Dispose после вызова.

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

Наконец, если вас беспокоит только одна переменная, попробуйте изменить запрос, чтобы вернуть только одно значение, которое вы ищете, и изменить вызов на вызов ExecuteScalar().

// Consider specifying the fields you are concerned with 
string sqlstr="select * from table1 where id = 1"; 

using (var m_conn = new OdbcConnection("DSN=real"))//This DSN set by through the windows control panel,ODBC manager,system dsn 
using (var selectCMD = new OdbcCommand(sqlstr, m_conn)) 
{ 
    m_conn.Open(); 

    using (var myreader= selectCMD.ExecuteReader()) 
    { 
     if (myreader == null) 
      return null; 
     string s =myreader["field"].ToString(); 
    } 
} 
+0

Спасибо за ваш ответ. Кодекс выше упрощен мной, я использую одноэтапную отладку точки останова, застрял в этом утверждении около десяти секунд:

string s = myreader ["field"]. ToString();

, эта скорость медленна за пределами воображения. Это из-за моей системы? Моя система - win7 64 бит; –

+0

Вы пробовали использовать код выше? Особенно попробуйте изменить оператор select на «Select field from table1». Доступ не очень быстрый db для начала, и указание поля обязательно поможет db. –

+0

Да, я пробовал. select statement: «Выбрать поле из таблицы1» очень быстро. Я использовал MFC VS2010. Он также очень медленный. Поэтому я думаю, что это проблема драйвера ODBC для системы Windows. Спасибо всем. –

 Смежные вопросы

  • Нет связанных вопросов^_^