我在Microsoft SQL数据库中有一些数据表。我得到那些带有dataadapter并将它们放入数据集的人。在此之后我想改变一些值,比如我想改变的一些值:“Na / Na”。现在问题在于,此列的正常类型是INT。所以它给了我一个错误。
有没有一种方法可以确保所有列都将STRING作为其类型?或者我可以确保数据表的模式不会被使用,我知道我可以在C#中自己创建所有列,然后通过查询获取值,但这将是很多工作。
答案 0 :(得分:1)
我可以建议一种方法,但它并不完美。 方法是在查询或存储过程中将字段转换为varchar。在存储过程中对MS SQL Server端进行“Na / Na”更改会更好(如果可能)。
答案 1 :(得分:0)
只是一栏导致问题吗?你总是在数据库中将它转换为nvarchar或其他东西,然后再发送给C#。然后列类型将是一个字符串。或者,您几乎可以使用某些代码来查看列的类型,如果找到整数,则向DataTable添加一个新列并将数据复制到其中。这很危险地接近你自己为自己制作专栏的建议。
最后,如果你的整数实际上被限制在某个范围内(即它们总是正数),那么你可以使用一个神奇的值(如-1)来表示N / A然后用你用来处理这个的任何代码确保你在用它做之前就认识到了神奇的价值。
我不认为(尽管我很乐意纠正)您可以更改列的类型并自动转换所有当前值。
答案 2 :(得分:0)
您可以尝试克隆DataTable
并更改每列的数据类型,如this帖子中所述。 (向左滚动一半的答案)。
另一种方法是更改(或创建)获取数据的存储过程,并使其传回所需的正确“Na / Na”类型值。
答案 3 :(得分:0)
您是否正在使用“类型化数据集”,并且您是否只需要在某些情况下显示“Na / Na”?
然后,您可以轻松地将属性添加到数据表的部分类中,该部分类是一个字符串,只返回您需要显示的内容:
public partial class DataSet1 {
partial class DataTable1DataTable
{
public string MyStringColumn {
get {
return IntColumn <= 0 ? "Na/Na" : IntColumn.ToString();
}
}
}
}
答案 4 :(得分:0)
数据表填充数据后,无法更改列的DataType。
因此,您需要首先通过在C#中添加列来定义数据表。
但是,您仍然可以使用adapter.Fill
命令,但使用第二个参数指定要在数据集中填充的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");