假设我有一段代码从我的数据库中检索行并将它们写入变量(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以正确的顺序读取它们?
答案 0 :(得分:1)
顺序无关紧要。您可以按照自己喜欢的顺序访问它们。您已经有两个测试用例,您可以自己测试一下。检查自己比在互联网上听随机陌生人更好。
答案 1 :(得分:0)
我应该这样做吗?
当然可以。 SqlDataReader
不会强制您按顺序读取行。您可以按任意顺序使用它们。
第二种方法是否因SQLDataReader更有效 以正确的顺序读取它们?
我认为这不重要。 SqlDataReader
不会读取前四行仅读取第5行。所以他们之间没有性能问题。 使用哪一个更适合您。
作为Tim suggest,您可以在select语句中使用列名,以便在您拥有大量列时可以更具可读性。
如果是,则指定列名称是否有性能优势 还在检索所有列?
否强>
SELECT * FROM
和SELECT col1,col2,col3, col4, col5 FROM
之间没有任何性能优势。它们非常相同。 (我假设你的表中只有5列)