标签: system.data.datatable

从解析字符串值的单行条件语句将null传递给DataTable

我有一个应用程序循环通过固定宽度的文本文件,将每一行读取到一个字符串变量并使用.Substring()方法查找给定字段的数据.对于给定的字段,它检查内容是否只是空格,或者其中是否存在实际的"数据",即除了空格之外的任何内容.例如,如果存在数据,并且该数据表示日期,则对该数据运行DateTime.Parse()并将其传递到C#DataTable中的datetime类型的字段; 但是,如果没有数据 - 只是空格,我想简单地将空值传递给该字段.以下是一段代码来说明:

var dataTable = new DataTable();

dataTable.Columns.Add("Application_Date").DataType = Type.GetType("System.DateTime");

while (!sr.EndOfStream)
{
    string row = sr.ReadLine();

    if (row.Substring(0, 1) == "2" && row.Substring(42, 1) == "T")
    {
        DataRow dr = dataTable.NewRow();

        dr["Application_Date"] = row.Substring(124, 8) != "        " ?
                                 DateTime.Parse(row.Substring(124, 4) +
                                 "-" + row.Substring(128, 2) + "-" +
                                 row.Substring(130, 2)) :
                                 null as DateTime?;                                                         

     }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,当我尝试运行它时,它会抛出一个错误,说它想要一个DBNull(Cannot set Column 'Application_Date' to be null. Please use DBNull instead.)

但是当我尝试简单地传递一个DBNull时,它告诉我它无法在DateTime和DBNull(Type of conditional expression cannot be …

.net c# datetime nullable system.data.datatable

17
推荐指数
2
解决办法
2万
查看次数

比较两个DataTable并选择第二个表中不存在的行

我有两个DataTables,我想从第一个中选择第二个不存在的行

例如:

Table A
  id   column
  1     data1
  2     data2
  3     data3
  4     data4

Table B
  id   column
  1     data10
  3     data30

我希望结果如下:

Table C
  id    column
  2      data2
  4      data4

c# winforms system.data.datatable

16
推荐指数
1
解决办法
6万
查看次数

Datatable.Dispose()会从内存中删除吗?

我通过非常简单的代码进行研究,并且一直看到数据表的dispose()结果

以下是代码

DataTable dt= new Datatable();
SqlCommand Cmd = new SqlCommand("sp_getData",SqlCon);
SqlCommand.CommandType= CommandType.StroedProcedure;
SqlCon.Open();
sqlDataReader dr=  cmd.ExecuteReader();
dt.Load(dr);
SqlCon.Close();
grdView.DataSource =dt;
dt.Dispose() // Here I dispose the table as it is no use for me & wanna memory free from this
Run Code Online (Sandbox Code Playgroud)

但在处理掉数据表之后我仍然发现它仍然显示RowCount = 10k.

Dispose()方法是不是释放内存并使对象为null?

我怎样才能使它成为null或释放这个对象占用的内存?

c# dispose winforms system.data.datatable

9
推荐指数
2
解决办法
3万
查看次数

从DataTable中的行创建一系列匿名类型

这是一个"让我们看看它是否可以完成"运动比什么都重要.

假设我有一个包含多个列的DataTable.使用linq,是否可以选择表的行,使得结果将是匿名类型的序列,其中匿名类型的每个属性根据DataTable的列名命名,并且每个属性的类型都设置为适当.

所以,如果我的DataTable有三列如下:

Name = "Column1",  DataType = string
Name = "Column2",  DataType = integer
Name = "Column3",  DataType = bool
Run Code Online (Sandbox Code Playgroud)

然后我想选择DataTable的所有行,使匿名类型有三个属性:

DataSet ds = functionThatGetsADataSet();
var seq = ds.Tables[0].AsEnumerable().Select( r => **** MAGIC HERE ****)

foreach (var s in seq)
{
    Console.WriteLine(s.Column1);
    Console.WriteLine(s.Column2);
    Console.WriteLine(s.Column3);
}
Run Code Online (Sandbox Code Playgroud)

我知道我可以这样做:

DataSet ds = functionThatGetsADataSet();
var seq = ds.Tables[0].AsEnumerable().Select( r => 
   new 
   {
       Column1 = r.Field<string>("Column1"),
       Column2 = r.Field<int>("Column2"),
       Column3 = r.Field<bool>("Column3"),
   }
)

foreach (var s in seq)
{
    Console.WriteLine(s.Column1);
    Console.WriteLine(s.Column2);
    Console.WriteLine(s.Column3);
} …
Run Code Online (Sandbox Code Playgroud)

c# linq anonymous-types system.data.datatable

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

复制C#DataTable并将所有值转换为字符串

我有一个DataTable不同类型的列.我想要的是DataTable具有相同列名但所有值都是字符串的.也就是说,如果这是第一个:

Name   Age
-----------
John   31
Alice  27
Marge  45
Run Code Online (Sandbox Code Playgroud)

其中Name是一String列,Age是一Int32列,我想要的是:

Name   Age
-----------
John   31
Alice  27
Marge  45
Run Code Online (Sandbox Code Playgroud)

其中,姓名和年龄是两个字符串列.输出表必须包含与输入表相同的值,但每个值都必须转换为字符串.任何人都可以提供有关如何做到这一点的任何见解吗?我想过可能会做类似的事情

foreach (DataColumn col in inputTable.Columns)
{
    outputTable.Columns.Add(col.ColumnName, typeof(string));

    foreach (DataRow row in inputTable.Rows)
    {
        ...??
    }
}
Run Code Online (Sandbox Code Playgroud)

或者可能有更好或更有效的方法?任何指导将不胜感激.

c# string type-conversion system.data.datatable

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

c# - 从类(不是实例列表)创建数据表

这个问题涉及泛型和类型以及数据表.

以下代码片段在此处和网络周围,并基于泛型类型创建数据表:

public static DataTable ListToDataTable<T>(List<T> list)
{
    DataTable dt = new DataTable();

    foreach (PropertyInfo info in typeof(T).GetProperties())
    {
        dt.Columns.Add(new DataColumn(info.Name, info.PropertyType));
    }
    foreach (T t in list)
    {
        DataRow row = dt.NewRow();
        foreach (PropertyInfo info in typeof(T).GetProperties())
        {
            row[info.Name] = info.GetValue(t, null);
        }
        dt.Rows.Add(row);
    }
    return dt;
}
Run Code Online (Sandbox Code Playgroud)

我正在使用优秀的FileHelpers库将批量记录导入SQL Server.要使用SqlBulkCopy,我需要一个包含给定类型列的数据表.Filehelpers可以在运行时读取.cs文件并基于此创建您的类型.例如:

System.Type userType = null;
userType = ClassBuilder.ClassFromSourceFile("myclassfile.cs");
Run Code Online (Sandbox Code Playgroud)

我想改变上面的方法,所以它只是在传递一个类型时为我创建列(例如'userType').即方法签名将是这样的:

public static DataTable TypeToDataTable<T>(<T> myType)
Run Code Online (Sandbox Code Playgroud)

并将返回一个包含列的空数据集,准备添加userType行.

我尝试了各种方法 - 任何想法?

c# generics reflection types system.data.datatable

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

我该如何管理大型DataTable?

由于没有多大意义的原因(阅读:不是我的决定)我需要在DataTable中保留大量的行,大约~90,000,我没有使用数据库的选项.

我需要能够有效地搜索DataTable以查找符合某些基本条件的行.例如,我可能正在查看两个特定列中值为2的行.

做这个的最好方式是什么?

编辑:请查看http://chat.stackoverflow.com/transcript/message/62648#62648了解更多详情; 在我完成这项工作后,我将尝试从聊天中总结额外的细节,并提供我的解决方案.

.net c# search system.data.datatable

3
推荐指数
1
解决办法
640
查看次数

根据一列获取两个数据表之间的差异

我有以下场景:

表 A 有 50 条记录,表 B 有 2 条记录。

我需要定义一个新表,比如 TableDiff,它应该包含表 A 中不存在于表 B 中的 48 条记录

我的问题是表 A 和表 B 不相同,但我有rowId两个表中存在的字段,我需要使用它进行比较。

c# linq asp.net system.data.datatable

3
推荐指数
1
解决办法
7229
查看次数

如何合并数据表中的数据

我已经从C#.Net中的多个xml文件填充了数据集。结果,我有了一个包含多个DataTables的数据集。它们全部都有两列,分别是“ ID”和“ Name”。这些数据表可以包含相同ID的行,而不是所有表。

例如:

DataTable 1
------------
ID  Name1
1   S1
2   S2
4   S4

DataTable 2
------------
ID  Name2
1   D1
2   D2
3   D3
Run Code Online (Sandbox Code Playgroud)

我的目标是将所有数据组合到一个数据表中,如下所示

FinalTable
-----------
ID  Name1  Name2
1   S1     D1
2   S2     D2
3          D3
4   S4       
Run Code Online (Sandbox Code Playgroud)

有什么办法可以做到这一点?可能正在使用关系,DataViews ...只是猜测。

提前致谢..

c# dataset system.data.datatable

2
推荐指数
1
解决办法
1124
查看次数