2

假设我有一段代码可以从我的数据库中检索行并将它们写入变量 ( 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 以正确的顺序读取它们而更有效?

4

2 回答 2

1

不,顺序无关紧要。您可以按您喜欢的任何顺序访问它们。你已经有了两个测试用例,你可以自己测试。自己检查总是比在互联网上听随机的陌生人更好。

于 2013-05-31T11:33:48.377 回答
0

我应该这样做吗?

当然可以。SqlDataReader不会强迫您按照行的顺序读取行。您可以按您想要的任何顺序使用它们。

第二种方法是否会因为 SQLDataReader 以正确的顺序读取它们而更有效?

我不认为这很重要。SqlDataReader不读取前四行,只读取第 5 行。所以它们之间不存在性能问题。使用它们哪一个对您来说更具可读性。

正如 Tim建议的那样,您可以在 select 语句中使用列名,这样当您有很多列时,它对您来说更具可读性。

如果您仍在检索所有列,指定列名是否有性能优势?

不。

和之间没有性能优势SELECT * FROMSELECT col1,col2,col3, col4, col5 FROM它们是相当的。(我假设您的表中只有 5 列)

于 2013-05-31T11:34:47.947 回答