Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 数据集类型问题_C#_.net_Sql_Dataset_Types - Fatal编程技术网

C# 数据集类型问题

C# 数据集类型问题,c#,.net,sql,dataset,types,C#,.net,Sql,Dataset,Types,我在Microsoft SQL数据库中有一些数据表。我使用dataadapter获取这些数据,并将它们放入数据集。在此之后,我想更改一些值,比如我想更改为:“Na/Na”。现在的问题是,这个列的正常类型是INT,所以它给了我一个错误 是否有一种方法可以确保所有列的类型都是STRING?或者我可以确保数据表的模式不被使用,我知道我可以自己在C#中生成所有列,然后通过查询获取值,但这将是一个非常复杂的工作。是不是只有一列导致了问题?在将其发送到C#之前,您可以始终在数据库中将其转换为nvarchar

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


是否有一种方法可以确保所有列的类型都是STRING?或者我可以确保数据表的模式不被使用,我知道我可以自己在C#中生成所有列,然后通过查询获取值,但这将是一个非常复杂的工作。

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

最后,如果你的整数实际上被限制在某个范围内(即它们总是正的),那么你可以使用一个魔术值(比如-1)来表示N/a,然后在你使用的任何代码中处理它,确保你在使用它之前识别魔术值


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

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

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

另一种方法是更改(或创建)获取数据的存储过程,并使其传回所需的正确的“Na/Na”类型值。

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

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

public partial class DataSet1 {
    partial class DataTable1DataTable
    {
        public string MyStringColumn {
            get {
                return IntColumn <= 0 ? "Na/Na" : IntColumn.ToString();
            } 
        }
    }
}
公共部分类数据集1{
部分类DataTable1数据表
{
公共字符串MyStringColumn{
得到{

return IntColumn在数据表中填充数据后,不能更改列的数据类型。 因此,首先需要通过在C#中添加列来定义数据表。 但是,您仍然可以使用
adapter.Fill
命令,但使用第二个参数指定要在数据集中填充的数据表的名称

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");

您需要将此值保存到DB,还是仅用于显示?您真的认为您应该这样做吗?这是可能的,我可以编写好的解决方案,但我不会。我真的建议您找到一个替代您想要做的。我有一些值我想“规范”这意味着我想看看这些值是否在某个值内。然后我会给单元格一个true或false。这只是为了显示,但之后我会在数据库中创建只包含字符串类型的新数据表。并将新的“specced”表返回到数据库中。我已经考虑过您的解决方案,但问题是这些表中有一些-1值,可能是真的,也可能是假的。这听起来不错,我希望dataadapter将所有值作为datatype.String放入数据集中。第一个解决方案听起来不错,我想我会选择它。我知道我正在做的事情ng并不是100%应该的。但我从一家公司得到了各种愚蠢的价值观,需要从中做出一些体面的东西。如果你没有读到我之前的评论,很抱歉。但我以后还需要存储它。发现上面发布的其他解决方案看起来不错,不是最“整洁”的是的,谢谢你的帮助!看看我使用的另一个解决方案,它工作得很好,对我的表来说并不慢,并且解决了这个问题。