我有以下格式的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) 我在尝试从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) 我有疑问,也许这里有人不介意帮助我.我可以说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) 我有一个包含4列A,B,C和D的数据表,因此A,B和C列的特定值组合在数据表中是唯一的.
目标:为列A,B和C的给定值组合找到列D的值.
我想循环数据行集应该这样做.有没有办法使用Datatable.Select()来实现这一目标?更具体一点 - 我可以在选择过滤器中有多个条件,即逻辑AND运算符连接每个列A,B和C的条件.
我循环遍历数据表中的每一行:
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)
我该怎么做呢?
我有一小段代码,它最初反复创建了一个SqlDataAdapter对象.
尝试简化我的调用,我用SqlCommand替换了SqlDataAdapter,并将SqlConnection移到了循环之外.
现在,每当我尝试编辑返回到我的DataTable的数据行时,我都会抛出之前未抛出的ReadOnlyException.
注意:我有一个自定义函数,可根据其ID检索员工的全名.为简单起见,我在下面的示例代码中使用了"John Doe"来证明我的观点.
ExampleQueryOld与SqlDataAdapter一起使用 ; 每当我尝试写入DataRow的元素时,ExampleQueryNew都会因ReadOnlyException 而失败:
这有效,没有问题:
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) 我知道我可以使用while(dr.Read()){...}但是循环我桌子上的每个字段,我想从第一行中检索所有值,然后是第二行...依此类推.
假设我有一个这样的表格:
ID--------------Value1--------------Value2------------------Value3
1 hello hello2 hello3
2 hi1 hi2 hi3
Run Code Online (Sandbox Code Playgroud)
首先,我想,hello,hello2和hello3,然后去到第二排,并得到所有的值.
有没有办法实现这个目标?我希望有人理解我的意思.
对不起,现在已经解决了.我只是没有正确编码......
是的,SqlDataReader.Read()方法做了它应该做的事情,再次错误是我的.
我想将一个DataTable附加到另一个DataTable.我看到DataTable类有两个方法; "加载(IDataReader)"和"合并(DataTable)".从文档中,如果存在行,两者似乎都会将传入数据与现有DataTable"合并".我将在数据访问层中进行合并.
我可以使用IDataReader并使用Load方法合并DataTables.或者我可以使用IDataReader加载DataSet,从DataSet获取DataTable,然后使用Merge方法合并DataTables.
我想知道是否有人能告诉我哪种方法可以使用?
或者,如果您对如何完成此任务有不同的建议,请与我们联系.
我在这里使用公认的解决方案将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) 我有一些代码通过列名设置DataRow中的单元格的值,即
row["ColumnName"] = someValue;
Run Code Online (Sandbox Code Playgroud)
我还要将列中此行的值设置在上面找到的那一行的右侧.显然,如果我通过索引而不是按列名获取单元格,这将很容易.那么有没有办法从列名中获取列索引,从而允许我这样做:
row[index + 1] = someOtherValue;
Run Code Online (Sandbox Code Playgroud)
即,我是否需要在最初创建表时创建某种列索引和列名称的字典,或者我可以稍后从列名称中获取索引而不执行此操作?
datatable ×10
c# ×9
asp.net ×3
.net ×1
datarow ×1
excel ×1
json ×1
openxml ×1
openxml-sdk ×1
select ×1
sqlbulkcopy ×1
sqlcommand ×1
vb.net ×1