假设我有一段代码,它从数据库中检索行并将它们写入一个变量(html)
using (SqlConnection conn = new SqlConnection())
{
conn.ConnectionString = ConfigurationManager.ConnectionStrings["connection_string"].ConnectionString;
SqlCommand cmd = new SqlCommand("SELECT * FROM Table WHERE order_id = @id", conn);
cmd.Parameters.Add("id", SqlDbType.Int).Value = Request.QueryString["id"];
conn.Open();
SqlDataReader sdr = cmd.ExecuteReader();
while (sdr.Read())
{
html += sdr.IsDBNull(2) ? "" : sdr.GetString(2);
html += sdr.IsDBNull(1) ? 0 : sdr.GetInt32(1);
html += sdr.IsDBNull(4) ? 0 : sdr.GetInt32(4);
html += sdr.IsDBNull(3) ? "" : sdr.GetString(3);
html += sdr.IsDBNull(0) ? 0 : sdr.GetInt32(0);
}
} 让我们假设我需要它们以准确的顺序输出- 2,1,4,3,0。我应该这样做吗?
while (sdr.Read())
{
html += string.Format("{2}{1}{4}{3}{0}",
sdr.IsDBNull(0) ? 0 : sdr.GetInt32(0),
sdr.IsDBNull(1) ? 0 : sdr.GetInt32(1),
sdr.IsDBNull(2) ? "" : sdr.GetString(2),
sdr.IsDBNull(3) ? "" : sdr.GetString(3),
sdr.IsDBNull(4) ? 0 : sdr.GetInt32(4)
);
}第二种方法是否会更有效,因为SQLDataReader会以正确的顺序读取它们?
发布于 2013-05-31 19:33:48
不,顺序并不重要。您可以按您喜欢的任何顺序访问它们。你已经有了两个测试用例,你可以自己测试它。你自己去查查总比在网上听陌生人说话要好。
发布于 2013-05-31 19:34:48
我应该这样做吗?
你当然可以。SqlDataReader不会强制您按顺序读取行。你可以按你想要的顺序使用它们。
第二种方法会因为SQLDataReader以正确的顺序读取它们而更有效吗?
我觉得这无关紧要。SqlDataReader不读取前四行,只读第五行。因此,它们之间不存在性能问题。使用它们中对您更易读的那个。
作为Tim suggest,您可以在select语句中使用列名,这样当您有很多列时,它的可读性就会更好。
如果您仍然检索所有列,那么指定列名是否对性能有好处?
编号:
SELECT * FROM和SELECT col1,col2,col3, col4, col5 FROM之间没有性能优势,它们是完全相同的。(我假设您的表中只有5列)
https://stackoverflow.com/questions/16856283
复制相似问题