美好的一天,
IDE Visual Studio 2010
.NET 3.5
平台 WinForms
SO问题" 从DataRow获取价值之间的差异 "是指.
我有一个带有列的数据库表[ID] INT IDENTITY(1, 1) NOT NULL PRIMARY KEY.查询此表并将值存储在局部变量中时,我得到一个无效的强制转换异常; 示例代码:
string sQuery = @"
SELECT [ID], [Description]
FROM [Sources]
ORDER BY [Description] ";
using (DataTable dtSources = SQLHelper.Fetch(sQuery))
{
foreach (DataRow drSource in dtSources.Rows)
{
int iID = drSource.Field<int>("ID"); // InvalidCastException
string sDescrption = drSource.Field<string>("Description");
}
}
Run Code Online (Sandbox Code Playgroud)
当步进执行并在故障线路上执行"快速监视"时,我发现通过将线路更改为drSource.Field<object>("ID"),单元格值类型是short而不是int.为什么会在表定义中清楚地表明这种情况int呢?此外,short应当隐式转换为int因为short比较小,应该"适合"的权利?
我已经阅读了几篇关于using语句的文章,试图了解何时应该使用它.这听起来像大多数人认为它应该尽可能多地使用,因为它可以保证处理未使用的物体.
问题是所有的例子总是显示如下:
using (SqlCommand scmFetch = new SqlCommand())
{
// code
}
Run Code Online (Sandbox Code Playgroud)
这是有道理的,但它只是一小段代码.在数据库上执行查询时应该怎么做?所有步骤是什么?它看起来像这样:
string sQuery = @"
SELECT [ID], [Description]
FROM [Zones]
ORDER BY [Description] ";
DataTable dtZones = new DataTable("Zones");
using (SqlConnection scnFetchZones = new SqlConnection())
{
scnFetchZones.ConnectionString = __sConnectionString;
scnFetchZones.Open();
using (SqlCommand scmdFetchZones = new SqlCommand())
{
scmdFetchZones.Connection = scnFetchZones;
scmdFetchZones.CommandText = sQuery;
using (SqlDataAdapter sdaFetch = new SqlDataAdapter())
{
sdaFetch.SelectCommand = scmdFetchZones;
sdaFetch.Fill(dtZones);
}
}
if (scnFetchZones.State == ConnectionState.Open)
scnFetchZones.Close();
}
Run Code Online (Sandbox Code Playgroud)
我想知道的是:
•是否可以使用4,5,10个嵌套的using语句来确保处理所有对象?
•我在什么时候做错了什么,我应该考虑修改吗?
•如果由于嵌套的using语句太多而需要修订,我有哪些选择? …