小编tha*_*Guy的帖子

DataRow.Field <T>(字符串列)抛出无效的强制转换异常

美好的一天,

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比较小,应该"适合"的权利?

c# datarow

8
推荐指数
4
解决办法
4万
查看次数

试图更好地理解'使用'声明

我已经阅读了几篇关于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语句太多需要修订,我有哪些选择? …

c# using-statement

5
推荐指数
1
解决办法
299
查看次数

标签 统计

c# ×2

datarow ×1

using-statement ×1