如何在类型数据集中创建新列

How do I create a new column in a type dataset

我有一个类型化的数据集对象,它从我的 sql-server 数据库中获取 table。据我所知,sql-server不支持TimeSpan类型。我如何设法在我的 C# 代码中添加该新列?

目前,我有一个保存报价的列,所以基本上,在数据库中,我将存储报价的数量,然后将其转换为 TimeSpan,反之亦然(TimeSpan 将被编辑在应用程序中,然后将转换为报价,然后推送到数据库)。我的问题是,由于它是一个类型化的数据库,将与 DevExpress 控件(甘特图控件)一起使用,我不知道如何添加新的 TimeSpan 列并使用它?

我看到的唯一解决方案是基于第一个数据创建一个新数据table,复制其中的数据,使用它,一旦用户想要更新,将其推回我的类型数据集并使用 sprocs 进行更改然后恢复,但这似乎不是最佳解决方案...有什么想法吗?

这是我用来在我的行中生成新 属性 的代码,问题是我看不到我的列。

public TimeSpan TimeSpanDuration
{
    get => IsDurationNull() ? new TimeSpan(Duration) : TimeSpan.Zero;
    set => Duration= value.Ticks;
}

没有什么能阻止您向类型化数据集添加属性;毕竟,这只是 visual studio 为您所做的。打开您的数据集,双击数据 table,您将被传送到带有预填充 partial class YourTablename 的代码视图。右键单击 YourTableName 并选择 Goto Definition 以在 YourDataSet.Designer.cs 文件

中找到 table

读一读;它只是一堆代码,用于为基本 DataTable 及其列建立命名属性。使用代码 window 顶部中间的下拉菜单为您的 table 的行找到部分 class。这是我的人 table 的出生日期列在一行中的显示方式(属性 从数据行的项目数组中获取生日盒装对象,并将其转换为日期时间,所以我不不必):

        public System.DateTime Birthdate {
            get {
                try {
                    return ((global::System.DateTime)(this[this.tablePerson.BirthdateColumn]));
                }
                catch (global::System.InvalidCastException e) {
                    throw new global::System.Data.StrongTypingException("The value for column \'Birthdate\' in table \'Person\' is DBNull.", e);
                }
            }
            set {
                this[this.tablePerson.BirthdateColumn] = value;
            }
        }

没有什么能阻止我在我自己的代码中声明我自己的 partial class PersonRow(不要在设计器文件中这样做 - 它会丢失 - 在你双倍时传送到的文件中这样做单击设计器中的数据table)有一个属性像:

        public int AgeInYears {
            get {
                try {
                    return (DateTime.Now - ((global::System.DateTime)(this[this.tablePerson.BirthdateColumn]))).Years;
                }
                catch (global::System.InvalidCastException e) {
                    throw new global::System.Data.StrongTypingException("The value for column \'Birthdate\' in table \'Person\' is DBNull. so the age cannot be calculated", e);
                }
            }
            set { //do we really want to allow setting via years??
                this[this.tablePerson.BirthdateColumn] = DateTime.Now.AddYears(-value);
            }
        }

拥有一个与 SQLS 存储数据的方式相匹配的列(int64?)并构建另一组属性将该列虚拟化为您想要的方式(TimeSpan.FromMilliseconds?)