当前位置:编程学习 > C#/ASP.NET >>

大家讨论下从数据库中读取一条数据最高效的解决方法

我先来说说我的吧,我一般的是有两种的方式,不过觉得用的这两种都太拖沓了,尤其是第一种.

①用DataSet读取----------------------------
public static DataSet GetInfo(string strOrderStr)
{
SqlConnection con = new SqlConnection(ConnectionString());
SqlCommand cmd = new SqlCommand(strOrderStr, con);
SqlDataAdapter sda = new SqlDataAdapter(cmd);
DataSet dsInfo = new DataSet();

if (con.State == ConnectionState.Closed)
{
con.Open(); //打开数据库连接
}
try
{
cmd.ExecuteNonQuery();
sda.Fill(dsInfo);
}
catch (Exception e)
{
throw new Exception(e.ToString());
}
finally
{
//关闭连接,释放资源
cmd.Dispose();
con.Close();
con.Dispose();
sda.Dispose();
}
return dsInfo;
}

使用例子:
string strOrder = "select * from tables where id = 1";
DataAccess.GetInfo(strOrder ).Tables[0].Rows[0][0].toString(); [是不是太高射炮打蚊子了  -___,- ]


②用DataReader读取[下面的是Access的数据库例子]----------------------------
OleDbConnection con = new OleDbConnection(DataAccess.OleDbConnectionString());
OleDbCommand cmd = new OleDbCommand("select id,title,posttime from News order by posttime desc", con);
cmd.Connection.Open();
OleDbDataReader sdr = cmd.ExecuteReader();
while(sdr.Read())
{
  if(sdr.HasRows)
  {
    DateTime time = sdr[2].ToString().Split(' ')[0] ;   
  }
}
sdr.Close();
cmd.Connection.Close();
con.Close();
cmd.Dispose();
con.Dispose();
sdr.Dispose();

这两种都是太浪费了,因为现在写的是些小型的网站,数据量很小,考虑到以后要是数据量大的话,这两种方式问题就比较大了.

所以希望大家多来说说你们的一些数据访问的经验,例子. 呵呵 , ^_^

--------------------编程问答-------------------- up --------------------编程问答-------------------- 有一种方法叫做
ExecuteScalar()
好好看看文档吧 --------------------编程问答-------------------- Thx ls 的 --------------------编程问答-------------------- 同意使用ExecuteScalar()的方法 --------------------编程问答-------------------- ExecuteScalar 的意思就是返回单行单条数据。

返回多行数据应该用 ExecuteDataReader

返回大量数据用DataSet --------------------编程问答-------------------- [ExecuteScalar返回单行单条数据] 这个一般用的比较少吧, 好多都是返回整个一行的记录.

例如一个新闻标题列表,点击id为1的新闻标题进去后是具体内容页.其实就是把id为1的那行记录全部读出来.

这样的话用哪种比较好呢? --------------------编程问答-------------------- 一般非单项数据我都是用的dr
打开,读,关闭,ok.
开销也比较小... --------------------编程问答-------------------- [一般非单项数据我都是用的dr 
打开,读,关闭,ok. 
开销也比较小...]

恩,不过有的时候要视情况而定的,比如说要多次读取的话就不要重复的打开关闭了.第一次的时候打开,然后离开页面关闭. --------------------编程问答-------------------- 没做过太多次的,一般一个页面一次读取都不超过3次
其它的要么xml,要么直接sql一次解决,要么就是写的控件缓存,一个页面不应该有多个读取的 --------------------编程问答-------------------- up --------------------编程问答-------------------- 呵呵,nealbox qq号码发下吧,想和你交流交流. --------------------编程问答-------------------- 要不你就别用数据库了,呵呵,缓存吧 --------------------编程问答-------------------- 78200230 --------------------编程问答-------------------- 转自 晓风残月 的Blog
-----------------------------------------------
速度由快到慢
 1. DataReader.GetXXX(<<ColumnIndex>>)
 2. DataReader.GetXXX(Dictionary<string, int>[<<ColumnName>>])
[Dictionary<string, int>.Add(<<ColumnName>>, DataReader.GetOrdinal(<<ColumnName>>))] 
  3. DataReader.GetXXX((Int32)Hashtable[<<ColumnName>>])
 [Hashtable.Add(<<ColumnName>>, DataReader.GetOrdinal(<<ColumnName>>))]
 4. (<<Type>>)DataReader[<<ColumnIndex>>]
 5. DataReader.GetXXX(DataReader.GetOrdinal(<<ColumnName>>))
  6. Convert.ToXXX(DataReader[<<ColumnIndex>>])
  7. (<<Type>>)DataReader[<<ColumnName>>]
  8. Convert.ToXXX(DataReader[<<ColumnName>>]
 说明:
1.  按 Index(SELECT 子句中列索引) 读取比按 Name(列名)读取快
2.  DataReader.GetXXX(<<ColumnIndex>>)  遥遥领先,基于两点:
         a. 此方法内部直接访问对应的数据库类型,不存在 box/unbox 。
         b. 基于索引访问。
3.  (<<Type>>)DataReader[<<ColumnIndex>>] 比 Convert.ToXXX(DataReader[<<ColumnIndex>>]) 快
         a. 前者属于编程语言特有的强制类型转换,对于值类型,存在 unbox 过程。
         b. 后者使用的是.NET FCL提供的一组与语言无关的类型转换方法。静态类 Convert  中的类型转换方法,调用源类型实现的 IConvertible 接口进行目标类型的转换。也就是说,只有实现了 IConvertible 接口接口的类型才能用 Convert.ToXXX  进行类型转换。如, Convert.ToInt32(object)
--------------------编程问答-------------------- sunlovesea,啥也不说了,眼泪哗哗滴 .  --------------------编程问答-------------------- QUOTE:sunlovesea,啥也不说了,眼泪哗哗滴   .  
-----------------------------
bormir,要不要带个桶接下你的眼泪?!


大家都说完了.闪. --------------------编程问答-------------------- ExecuteScalar 只返回第一行的第一列数据!

DataReader 速度是比dataset快,但是必须要与数据库连接才能正常工作!

dataset+cache速度也还可以!

补充:.NET技术 ,  ASP.NET
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,