nia*_*her 2 sql sql-server asp.net ado.net sqldatareader
假设我正在调用查询"SELECT name,city,country FROM People".一旦我执行了我的SqlDataReader,列的顺序与我的sql查询中的顺序相同吗?
换句话说,我可以依赖以下代码始终正常工作:
SqlConnection connection = new SqlConnection(MyConnectionString);
SqlCommand command = new SqlCommand();
command.Connection = connection;
command.CommandText = "SELECT [name], [city], [country] WHERE [id] = @id";
try
{
connection.Open();
SqlDataReader reader = command.ExecuteReader(System.Data.CommandBehavior.SingleRow);
if (reader.Read())
{
// Read values.
name = reader[0].ToString();
city = reader[1].ToString();
country = reader[2].ToString();
}
}
catch (Exception)
{
throw;
}
finally
{
connection.Close();
}
Run Code Online (Sandbox Code Playgroud)
如果我使用列名而不是序数(reader ["name"]),我还会失去多少性能?
是否有任何官方的微软文档描述了SqlDataReader中列排序的行为?
是的,但他们也可以使用SqlDataReader.GetName(ordinal)和SqlDataReader.GetOrdinal(name).
至于性能,我认为与检索下一行数据的开销相比,这可能是非常微不足道的.
我完全赞同Josh - 字段的位置确实如你在SQL查询文本中指定它们.
但是:我仍然更喜欢使用列名,因为它更健壮.例如,如果您需要在SQL查询中添加字段,该怎么办?
command.CommandText = "SELECT [name], [jobtitle], [city], [country] WHERE [id] = @id";
Run Code Online (Sandbox Code Playgroud)
现在突然你必须重写所有代码来改变位置....
我通常在循环之外做的,枚举数据读取器返回的所有行是确定我感兴趣的每个字段的位置:
int namePosition = reader.GetOrdinal("name");
int cityPosition = reader.GetOrdinal("city");
Run Code Online (Sandbox Code Playgroud)
然后我在循环中使用这些位置来处理数据,以便快速访问各个字段.这样你只能确定一次位置,但是你在循环数据中使用的位置 - 这两个世界中最好的!:-)
渣
| 归档时间: |
|
| 查看次数: |
4453 次 |
| 最近记录: |