标签: datatable

将JSON转换为DataTable

我有以下格式的JSON:

[
    {"id":"10","name":"User","add":false,"edit":true,"authorize":true,"view":true},
    {"id":"11","name":"Group","add":true,"edit":false,"authorize":false,"view":true},
    {"id":"12","name":"Permission","add":true,"edit":true,"authorize":true,"view":true}
]
Run Code Online (Sandbox Code Playgroud)

如何将其转换为C#DataTable对象,如下所示?

---------------------------------------------------------------------
ID    |  Name     |  Add    |   Edit  | View   | Authorize
---------------------------------------------------------------------
10    | User      | true    |  true   | true   |  true
11    | Group     | true    |  true   | true   |  true
12    | Permission| true    |  true   | true   |  true
Run Code Online (Sandbox Code Playgroud)

c# datatable json

45
推荐指数
4
解决办法
19万
查看次数

SqlBulkCopy - 数据源中String类型的给定值无法转换为指定目标列的类型money

我在尝试从DataTable执行SqlBulkCopy时遇到此异常.

Error Message: The given value of type String from the data source cannot be converted to type money of the specified target column.
Target Site: System.Object ConvertValue(System.Object, System.Data.SqlClient._SqlMetaData, Boolean, Boolean ByRef, Boolean ByRef)
Run Code Online (Sandbox Code Playgroud)

我理解错误说的是什么,但我怎样才能获得更多信息,例如行/字段正在发生?数据表由第三方填充,最多可包含200列和最多10k行.返回的列取决于发送给第三方的请求.所有的数据表列是字符串类型.我的数据库中的列不是所有varchar,因此,在执行插入之前,我使用以下代码格式化数据表值(删除非重要代码):

//--- create lists to hold the special data type columns
List<DataColumn> IntColumns = new List<DataColumn>();
List<DataColumn> DecimalColumns = new List<DataColumn>();
List<DataColumn> BoolColumns = new List<DataColumn>();
List<DataColumn> DateColumns = new List<DataColumn>();

foreach (DataColumn Column in dtData.Columns)
{
    //--- find the field map that tells …
Run Code Online (Sandbox Code Playgroud)

c# datatable sqlbulkcopy

45
推荐指数
7
解决办法
10万
查看次数

数据表到html表

我有疑问,也许这里有人不介意帮助我.我可以说3个数据表,每个数据表都有以下列:

大小,数量,数量,持续时间

数据表和值的名称

LivingRoom
================
1
1
1
1
2
2
2
2

BathRoom
================
3
3
3
3
4
4
4
4

BedRoom
=================
5
5
5
5
6
6
6
6
Run Code Online (Sandbox Code Playgroud)

现在我正在尝试构建一个html发票,我可以循环遍历所有数据表并输出以下html输出,非常基本:

<table>
<tr>
    <td>Area</td>
</tr>
<tr>
    <td>Living Room</td>
</tr>

<tr>
    <td>Size</td>
    <td>Quantity</td>
    <td>Amount</td>
    <td>Duration</td>
</tr>
<tr>
    <td>1</td>
    <td>1</td>
    <td>1</td>
    <td>1</td>
</tr>
<tr>
    <td>2</td>
    <td>2</td>
    <td>2</td>
    <td>2</td>
</tr>

<tr>
    <td>Area</td>
</tr>
<tr>
    <td>Bathroom</td>
</tr>

<tr>
    <td>Size</td>
    <td>Quantity</td>
    <td>Amount</td>
    <td>Duration</td>
</tr>
<tr>
    <td>3</td>
    <td>3</td>
    <td>3</td>
    <td>3</td>
</tr>
<tr>
    <td>4</td> …
Run Code Online (Sandbox Code Playgroud)

c# asp.net datatable

45
推荐指数
3
解决办法
10万
查看次数

具有多个条件的数据表选择

我有一个包含4列A,B,C和D的数据表,因此A,B和C列的特定值组合在数据表中是唯一的.

目标:为列A,B和C的给定值组合找到列D的值.

我想循环数据行集应该这样做.有没有办法使用Datatable.Select()来实现这一目标?更具体一点 - 我可以在选择过滤器中有多个条件,即逻辑AND运算符连接每个列A,B和C的条件.

c# datatable select

44
推荐指数
4
解决办法
37万
查看次数

如何从数据表中获取行号?

我循环遍历数据表中的每一行:

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

我想得到dt datatable中当前行的索引.例如:

int index = dt.Rows[current row number]
Run Code Online (Sandbox Code Playgroud)

我该怎么做呢?

c# datatable

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

ReadOnlyException DataTable DataRow"列X是只读的."

我有一小段代码,它最初反复创建了一个SqlDataAdapter对象.

尝试简化我的调用,我用SqlCommand替换了SqlDataAdapter,并将SqlConnection移到了循环之外.

现在,每当我尝试编辑返回到我的DataTable的数据行时,我都会抛出之前未抛出的ReadOnlyException.

注意:我有一个自定义函数,可根据其ID检索员工的全名.为简单起见,我在下面的示例代码中使用了"John Doe"来证明我的观点.

ExampleQueryOldSqlDataAdapter一起使用 ; 每当我尝试写入DataRow的元素时,ExampleQueryNew都会因ReadOnlyException 失败:

  • ExampleQueryOld

这有效,没有问题:

public static DataTable ExampleQueryOld(string targetItem, string[] sqlQueryStrings) {
  DataTable bigTable = new DataTable();
  for (int i = 0; i < sqlQueryStrings.Length; i++) {
    string sqlText = sqlQueryStrings[i];
    DataTable data = new DataTable(targetItem);
    using (SqlDataAdapter da = new SqlDataAdapter(sqlText, Global.Data.Connection)) {
      try {
        da.Fill(data);
      } catch (Exception err) {
        Global.LogError(_CODEFILE, …
Run Code Online (Sandbox Code Playgroud)

c# datatable sqlcommand sqldataadapter

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

如何使用C#中的数据读取器遍历行?

我知道我可以使用while(dr.Read()){...}但是循环我桌子上的每个字段,我想从第一行中检索所有值,然后是第二行...依此类推.

假设我有一个这样的表格:

ID--------------Value1--------------Value2------------------Value3
1               hello               hello2                  hello3
2               hi1                  hi2                      hi3
Run Code Online (Sandbox Code Playgroud)

首先,我想,hello,hello2hello3,然后去到第二排,并得到所有的值.

有没有办法实现这个目标?我希望有人理解我的意思.

对不起,现在已经解决了.我只是没有正确编码......

是的,SqlDataReader.Read()方法做了它应该做的事情,再次错误是我的.

c# asp.net datatable

43
推荐指数
4
解决办法
16万
查看次数

如何将一个DataTable附加到另一个DataTable

我想将一个DataTable附加到另一个DataTable.我看到DataTable类有两个方法; "加载(IDataReader)"和"合并(DataTable)".从文档中,如果存在行,两者似乎都会将传入数据与现有DataTable"合并".我将在数据访问层中进行合并.

我可以使用IDataReader并使用Load方法合并DataTables.或者我可以使用IDataReader加载DataSet,从DataSet获取DataTable,然后使用Merge方法合并DataTables.

我想知道是否有人能告诉我哪种方法可以使用?

或者,如果您对如何完成此任务有不同的建议,请与我们联系.

.net c# vb.net datatable

42
推荐指数
4
解决办法
11万
查看次数

阅读Excel Open XML忽略了空白单元格

我在这里使用公认的解决方案将excel表转换为数据表.如果我有"完美"数据,这可以正常工作,但如果我的数据中间有一个空白单元格,那么它似乎会在每列中放入错误的数据.

我想这是因为在下面的代码中:

row.Descendants<Cell>().Count()
Run Code Online (Sandbox Code Playgroud)

是填充单元格的数量(不是所有列)AND:

GetCellValue(spreadSheetDocument, row.Descendants<Cell>().ElementAt(i));
Run Code Online (Sandbox Code Playgroud)

似乎找到下一个填充的单元格(不一定是该索引中的内容)所以如果第一列为空并且我调用ElementAt(0),它将返回第二列中的值.

这是完整的解析代码.

DataRow tempRow = dt.NewRow();

for (int i = 0; i < row.Descendants<Cell>().Count(); i++)
{
    tempRow[i] = GetCellValue(spreadSheetDocument, row.Descendants<Cell>().ElementAt(i));
    if (tempRow[i].ToString().IndexOf("Latency issues in") > -1)
    {
        Console.Write(tempRow[i].ToString());
    }
}
Run Code Online (Sandbox Code Playgroud)

datatable excel openxml openxml-sdk

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

获取带有名称的DataTable列的索引

我有一些代码通过列名设置DataRow中的单元格的值,即

row["ColumnName"] = someValue;
Run Code Online (Sandbox Code Playgroud)

我还要将列中此行的值设置在上面找到的那一行的右侧.显然,如果我通过索引而不是按列名获取单元格,这将很容易.那么有没有办法从列名中获取列索引,从而允许我这样做:

row[index + 1] = someOtherValue;
Run Code Online (Sandbox Code Playgroud)

即,我是否需要在最初创建表时创建某种列索引和列名称的字典,或者我可以稍后从列名称中获取索引而不执行此操作?

c# asp.net datatable datarow

42
推荐指数
3
解决办法
11万
查看次数