字符串数组到数据表

时间:2015-01-29 19:25:32

标签: c#

在我的资源中,我有一个如下所示的字符串:One,Two;Three,Four;Five,Six等。

我需要将该字符串转换为DataTable,如下所示:

| Col 1 | Col 2 |

| One   | Two   |

| Three | Four  |

| Five  | Six   |

是否有优雅(不必编写多行代码)的方法将该字符串转换为DataTable而不必使用2个拆分和for循环来完成它?

修改 我发现了以下代码:Array.ForEach(input, c => dataTable.Rows.Add()[0] = c);但是从我看到的内容中,只有在您希望DataTable只有一列时才能使用它。

4 个答案:

答案 0 :(得分:1)

你几乎把它命名;你需要做的是分割琴弦,并将它们插入情侣。如果你有1个额外的字符串(子字符串的数量不是奇数),请将数据库末尾的最后一个字符串插入其自己的行中。

string yourString = "insert your string"
string[] Splits = yourString.split(",");// Dividing your string by "," chars.
int i=0;// declaring it here for using it later to check if the number is odd
for(int i=0; i < Splits.Length-1; i+=2)
{
InsertIntoDatabase(Splits[i,i+1]); //Inserting two strings into the database
}
//if i is odd, i will be equal exacly to the Length here. Otherwise...
if(i<Splits.Length)
{
InsertIntoDatabase(Splits[i]); // Insert the last string in it's own row.
}

InsertIntoDatabase必须插入2个字符串(我不能自己实现它,因为我真的不知道你正在使用什么数据库和设置)并且向下一行。用一个收到单个字符串的函数重载它,你就有了一个很好的方法。 :)

编辑:优雅..只是从评论中看到。我不确定你的意思是什么,但我想你可以覆盖string.Split并在每次分割时将字符串发送到DB - 可能会使它更“优雅”,但这取决于你的定义。祝你好运

答案 1 :(得分:0)

            DataTable tbl = new DataTable();
            tbl.Columns.Add("Col1");
            tbl.Columns.Add("Col2");

            string numbers ="One,Two;Three,Four;Five,Six";

            string[] array = numbers.Split(';');

            foreach(string s in array)
            {
                DataRow row = tbl.NewRow();
                string[] numb = s.Split(',');
                row["Col1"] = numb[0];
                row["Col2"] = numb[1];

                tbl.Rows.Add(row);
            }

以下是您需要的代码。下次先从你身边做一些事情并展示你的努力。

答案 2 :(得分:0)

您需要多次拆分和循环。


您可以使用DataTable.LoadDataRow方法,例如:

string str = "One,Two;Three,Four;Five,Six";
DataTable dt = new DataTable();
dt.Columns.Add("Col1", typeof(string));
dt.Columns.Add("Col2", typeof(string));
str.Split(';').ForEach(r => dt.LoadDataRow(
                                r.Split(',').Select(t => (object)t).ToArray()
                                , LoadOption.OverwriteChanges));

这会根据需要使用字符串值填充DataTable

现在,如果这足够优雅,那取决于!

答案 3 :(得分:0)

如果您不想使用for循环将其拆分两次,那么一种方法是将字符串提取到2D array然后:

DataTable table = new DataTable();
table.Columns.Add("col1", typeof(string));
table.Columns.Add("col2", typeof(string));

String val="One,Two;Three,Four;Five,Six";
string[][] values=val.Split(';').Select(x => x.Split(',')).ToArray();

for (int i= 0; i< values.Length; i++)
   {
       DataRow newRow = table.NewRow();
       for (int j= 0; j< 2; j++)
        {
           newRow[i] = values[i,j];
        }
       table.Rows.Add(newRow);
    }