我的访问数据库有700条记录,每条记录有50个字段。我使用PHP的ODBC查询,查询速度非常快,但我使用C#的ODBC查询,速度很慢,代码如下:
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 :(得分:0)
不要为您的应用选择比您需要处理的数据更多的数据。
您的陈述select * from table1 where id = 1
正在选择所有字段。如果您只需要名为field
的字段,请将您的select语句更改为select field from table1 where id = 1
。
如果您提供有关数据库结构的其他信息,我可能会提供更多帮助。
答案 1 :(得分:0)
这里有一些建议。我猜你正在多次访问这个代码,这是缓慢进入的地方。这很可能是因为你没有正确处理/关闭连接。下面是使用using子句重构的代码,它在调用后强制使用Dispose。
此外,指定列名称将有助于访问优化查询,而不是使用星号。
最后,如果您只关注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();
}
}