【问题标题】:Dataset type problem数据集类型问题
【发布时间】:2010-07-06 08:05:25
【问题描述】:

我在 Microsoft SQL 数据库中有一些数据表。我用数据适配器获取那些并将它们放入数据集中。在此之后,我想更改一些值,例如我想更改为:“Na/Na”。现在的问题是,该列的正常类型是 INT。所以它给了我一个错误。

有没有一种方法可以确保所有列的类型都为 STRING?或者我是否可以确保不使用数据表的架构,我知道我可以自己在 C# 中创建所有列,然后通过查询获取值,但这将是很多工作的方式。

【问题讨论】:

  • 您需要将此值保存到数据库中,还是只需要显示?
  • 你真的认为你应该这样做吗?这是可能的,我可以写出好的解决方案,但我不会。我真的建议你找到一个替代你想做的事情。
  • 我得到了一些我想“指定”的值,这意味着我想看看这些值是否在某个值内。然后我会给单元格一个真或假。这只是为了显示,但之后我将在数据库中创建仅包含字符串类型的新数据表。并将新的“指定”表放回数据库中。

标签: c# .net sql dataset types


【解决方案1】:

我可以建议一种方法,但它并不完美。 方法是在查询或存储过程中将字段转换为 varchar。在存储过程的 MS SQL Server 端进行“Na/Na”更改会更好(如果可能)。

【讨论】:

  • 这听起来不错,我希望数据适配器将所有值作为 datatype.String 放入数据集中。
【解决方案2】:

您可以按照this 帖子中的建议尝试克隆DataTable 并更改每列的数据类型。 (向下滚动大约一半以获得答案)。

另一种选择是更改(或创建一个)存储过程来获取您的数据并使其传回您想要的正确“Na/Na”类型值。

【讨论】:

  • 第一个解决方案听起来不错,我想我会选择那个。我知道我正在做的事情并不是应该的 100%。但是我从一家公司那里得到了各种愚蠢的价值观,需要从中做出一些像样的事情。
【解决方案3】:

是否只是一列导致您出现问题?在将其发送到 C# 之前,您总是可以在数据库中将其转换为 nvarchar 或其他内容。那么列类型将是一个字符串。或者,您几乎可以肯定地编写一些代码来查看列的类型,如果找到整数类型,则将新列添加到 DataTable 并将数据复制到其中。不过,这与您自己为所有人制作专栏的建议非常接近。

最后,如果您的整数实际上被限制在某个范围内(即它们始终为正数),那么您可以使用一个神奇的值(例如 -1)来表示 N/A,然后在您用来处理它的任何代码中确保在使用它之前,您会认识到它的神奇价值。

我不认为(尽管我很高兴得到纠正)您可以只更改列的类型并自动转换所有当前值。

【讨论】:

  • 我已经考虑过您的解决方案,但问题是这些表中有一些 -1 值,也可能是真或假。
【解决方案4】:

您是否在使用“类型化数据集”,是否只需要在某些情况下显示“Na/Na”?

然后您可以轻松地将属性添加到数据表的部分类中,该属性是一个字符串,并且只返回您需要显示的内容:

public partial class DataSet1 {
    partial class DataTable1DataTable
    {
        public string MyStringColumn {
            get {
                return IntColumn <= 0 ? "Na/Na" : IntColumn.ToString();
            } 
        }
    }
}

【讨论】:

  • 抱歉,如果您没有阅读我之前的评论。但我还需要稍后存储它。发现上面发布的其他解决方案看起来不错,不是最“整洁”的方法,但是是的。
【解决方案5】:

数据表填充数据后,您无法更改列的 DataType。 因此,您需要首先通过在 C# 中添加列来定义数据表。 但是您仍然可以使用adapter.Fill 命令,但使用第二个参数来指定您要填写Dataset 的DataTable 的名称。

DataSet DS = new DataSet();
DataTable DT = new DataTable("Table1");
DT.Columns.Add(new DataColumn("column1", typeof(string)));
DS.Tables.Add(DT);

adapter.Fill(ds , "Table1");

【讨论】:

  • 感谢您的帮助!看看我使用的其他解决方案,它运行良好,对我的表来说并不慢并解决了问题。
猜你喜欢
  • 2016-07-20
  • 1970-01-01
  • 2011-08-31
  • 2021-04-24
  • 1970-01-01
  • 1970-01-01
  • 2010-12-24
  • 2018-10-27
相关资源
最近更新 更多