DataRow: 지정된 열 이름으로 셀 값 선택
DataRow에 대한 문제가 있어서 매우 어려움을 겪고 있습니다.
데이터 행은 OleDbConnection을 사용하여 Excel 스프레드시트에서 읽습니다.
열 이름을 사용하여 DataRow에서 데이터를 선택하려고 하면 데이터가 있음에도 DBNull이 반환됩니다.
하지만 그렇게 간단하지는 않습니다.
datarow.Table.Columns[5].ColumnName"내 열"을 반환합니다.
datarow["my column"]DBNull을 반환합니다.
datarow[5]500을 반환합니다.
datarow[datarow.Table.Columns[5].ColumnName]DBNull을 반환합니다.(오타가 아닌지 확인하기 위해!)
열 번호를 사용하여 데이터 행에서 항목을 선택할 수는 있지만 열 순서가 변경되면 소프트웨어가 손상되기 때문에 그렇게 하는 것이 싫습니다.
어떤 버전의 .NET을 사용하고 있습니까?.NET 3.5부터 어셈블리 시스템이 있습니다.Data.DataSetExtensions - DataTable, dataRows 등에 대한 다양한 유용한 확장을 포함합니다.
사용해 볼 수 있습니다.
row.Field<type>("fieldName");
그래도 작동하지 않으면 다음을 수행할 수 있습니다.
DataTable table = new DataTable();
var myColumn = table.Columns.Cast<DataColumn>().SingleOrDefault(col => col.ColumnName == "myColumnName");
if (myColumn != null)
{
// just some roww
var tableRow = table.AsEnumerable().First();
var myData = tableRow.Field<string>(myColumn);
// or if above does not work
myData = tableRow.Field<string>(table.Columns.IndexOf(myColumn));
}
이것은 새로운 기능인가 뭔가가 분명한데, 그렇지 않으면 왜 언급되지 않았는지 잘 모르겠습니다.
의 열에 있는 값에 액세스할 수 있습니다.DataRow개체 사용row["ColumnName"]:
DataRow row = table.Rows[0];
string rowValue = row["ColumnName"].ToString();
다음을 수행하면 액세스가 더 쉬워집니다.
for (int i = 0; i < Table.Rows.Count-1; i++) //Looping through rows
{
var myValue = Table.Rows[i]["MyFieldName"]; //Getting my field value
}
힌트
DataTable table = new DataTable();
table.Columns.Add("Column#1", typeof(int));
table.Columns.Add("Column#2", typeof(string));
table.Rows.Add(5, "Cell1-1");
table.Rows.Add(130, "Cell2-2");
편집: 추가됨
string cellValue = table.Rows[0].GetCellValueByName<string>("Column#2");
public static class DataRowExtensions
{
public static T GetCellValueByName<T>(this DataRow row, string columnName)
{
int index = row.Table.Columns.IndexOf(columnName);
return (index < 0 || index > row.ItemArray.Count())
? default(T)
: (T) row[index];
}
}
Jimmy가 말한 것 외에도 다음을 사용하여 선택 항목을 제네릭으로 만들 수 있습니다.Convert.ChangeType필요한 null 검사와 함께:
public T GetColumnValue<T>(DataRow row, string columnName)
{
T value = default(T);
if (row.Table.Columns.Contains(columnName) && row[columnName] != null && !String.IsNullOrWhiteSpace(row[columnName].ToString()))
{
value = (T)Convert.ChangeType(row[columnName].ToString(), typeof(T));
}
return value;
}
열 값은 VB.net 에서 확인할 수 있습니다.
Dim row As DataRow = fooTable.Rows(0)
Dim temp = Convert.ToString(row("ColumnName"))
그리고 C#에서는 Jimmy's Answer를 사용할 수 있습니다. 변환하는 동안 주의하십시오.ToString()데이터가 null인 경우 null 예외를 발생시킬 수 있습니다. 대신 사용Convert.ToString(your_expression)null 예외 참조를 방지하기 위해
for (int i=0;i < Table.Rows.Count;i++)
{
Var YourValue = Table.Rows[i]["ColumnName"];
}
데이터 유형에 주의하십시오.일치하지 않으면 오류가 발생합니다.
var fieldName = dataRow.Field<DataType>("fieldName");
간단한 솔루션:sqlDt에 DataTable이 포함되어 있다고 가정하면 다음 행에 "aaa"라는 열의 내용이 표시됩니다.
Dim fldContent = sqlDte.Rows(iz).ItemArray(sqlDte.Columns.Item("aaa").Ordinal)
Console.WriteLine("aaa = " & fldContent)
편집된 코드 형식
언급URL : https://stackoverflow.com/questions/7119993/datarow-select-cell-value-by-a-given-column-name
'programing' 카테고리의 다른 글
| 코드가 최적화되었거나 네이티브 프레임이 호출 스택의 맨 위에 있으므로 식을 계산할 수 없습니다. (0) | 2023.05.20 |
|---|---|
| VBA 매크로에서 기호 #(해시) 사용 (0) | 2023.05.20 |
| jQuery removeClass 와일드카드 (0) | 2023.05.20 |
| Github 프로젝트 내부의 검색 코드 (0) | 2023.05.20 |
| C#의 문자열을 암호화하고 해독하시겠습니까? (0) | 2023.05.20 |