2017-01-17 9 views
0

私のアクセスデータベースには700レコードあり、すべてのレコードには50個のフィールドがあります。クエリの速度は非常に高速ですが、ODBCクエリをC#で使用するPHPのODBCクエリを使用します。以下:あなたが処理する必要があるよりも、あなたのアプリケーションのためのより多くのデータを選択しないでください助けC#ODBCクエリは非常にゆっくりです

答えて

0

ため

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? 

感謝。

明細select * from table1 where id = 1はすべてのフィールドを選択しています。 fieldという名前のフィールドのみが必要な場合は、selectステートメントをselect field from table1 where id = 1に変更します。

データベース構造に関する追加情報を提供した場合、私はより多くの助けになるかもしれません。

+0

下のマイデータベース構造:

48 float fields, 1 char 64 fields, 1 id of AUTO_INCREMENT field.
私はこれにすべてのフィールドを必要とするが、私は、PHPのODBC-クエリで同じクエリ文をテストし、その速度は非常に高速です。 –

0

ここにいくつかの提案があります。私は、このコードに何度もアクセスしていることを推測しています。これは、遅さが入ってくる場所です。これは、接続を正しく処理したり閉じたりしていないことが原因です。以下はusing句でリファクタリングされたコードであり、呼び出しの後にDisposeの使用を強制します。

また、アスタリスクを使用する代わりに、列の名前を指定すると、クエリを最適化するのに役立ちます。

最後に、変数が1つだけの場合は、探している値を1つ戻し、呼び出しを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

あなたの応答に感謝します。上記のコードは私によって単純化されています。私はシングルステップブレークポイントデバッグを使用します。約10秒後にこのステートメントでスタックします。

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

、この速度は想像以上に遅いです。私のシステムのためですか?私のシステムはwin7 64ビットです。 –

+0

上記のコードを試してみましたか?特にselect文を "table1からフィールドを選択"に変更してみてください。アクセスは非常に高速なdbではなく、フィールドを指定すると間違いなくdbに役立ちます。 –

+0

はい、試しました。 SELECTステートメント: "テーブル1からフィールドを選択"非常に高速です。私はVS2010のMFCを試しました。それはまた非常に遅いです。したがって、私はこれはWindowsシステムのODBCドライバの問題だと思う。 –

関連する問題