大家讨论下从数据库中读取一条数据最高效的解决方法
我先来说说我的吧,我一般的是有两种的方式,不过觉得用的这两种都太拖沓了,尤其是第一种.①用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