說我有從我的數據庫中檢索行,並將其寫入到一個變量(html
)SQLDataReader字段順序很重要嗎?
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以正確的順序讀取它們,第二種方法會更有效嗎?
簡答:不,沒關係。做什麼是最易讀,最不容易出錯的。但是你不應該寫'SELECT * FROM',而是'SELECT col1,col2,col3,... FROM'。 –
我個人不會擔心表現,除非它太慢。我會使用列名使其更具可讀性。另外考慮使用StringBuilder而不是簡化字符串,因爲這可以更快。 –
我通常使用列名稱,但這只是一個例子,所以我不能打擾他們=)出於興趣,如果您仍然檢索所有列,是否在指定列名稱方面有性能優勢? – roryok