将数据表转换为字符串?

时间:2015-08-06 11:31:34

标签: c# excel

与数据表保持一致。 我想要做的是从Excel文档中取出一个列,然后用它来创建一个PDF文件。

这里是我取出数据并放入Datagrid视图的代码。

void ExcelOpen()
{
     string PathConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" +textBox1.Text+ ";Extended Properties=Excel 12.0;";
     OleDbConnection conn = new OleDbConnection(PathConn);
     OleDbDataAdapter myDataAdapter = new OleDbDataAdapter("SELECT * FROM[" + textBox3.Text + "$"+Kolumn1.Text+":"+Kolumn1.Text+"]", conn);
     DataTable dt = new DataTable();
     myDataAdapter.Fill(dt);
     dataGridView1.DataSource = dt;

     // a try to convert the data to an Array.
     List<String> str = new List<string>();
     foreach (DataRow row in dt.Rows)
     {
         foreach (DataColumn col in dt.Columns)
         {

             stringColumnValue +="" + Convert.ToString(row[col]);
         }
         str.Add(stringColumnValue.Trim());
     }
     string.Join(" ", str.ToArray());
}

3 个答案:

答案 0 :(得分:1)

使用DataRow的ItemArray属性。尝试类似下面的内容。

foreach (DataRow row in dt.Rows)
{
    var stringArr = dataTable.row.ItemArray.Select(x =>x.ToString()).ToArray();
}

奖金注意:

下面的查询是针对SQL注入攻击打开的。您应该在sql语句中使用Parameters而不是字符串连接。

OleDbDataAdapter myDataAdapter = new OleDbDataAdapter("SELECT * FROM[" + textBox3.Text + "$"+Kolumn1.Text+":"+Kolumn1.Text+"]", conn);

答案 1 :(得分:0)

试试这种方式

List<string> s = dt.AsEnumerable().Select(x => x[0].ToString()).ToList();

    foreach(string e in s)
        Console.WriteLine(e);

答案 2 :(得分:0)

你在strColumnValue上做+ =,这意味着你每次进行循环都会继续添加到该字符串。

然后将strColumnValue添加到str,这是一个字符串数组。因此,如果您的行是“A”,“B”,“C”,则在3个循环后,StrColumnValue将为“ABC”,str将为[“A”,“AB”,“ABC”]

然后在最后执行连接,但是不要将连接的结果分配给任何变量,因此该语句无效。如果它被分配,它看起来像“A AB ABC”

就像有三种不同的方法来构建一起使用的字符串。

当您从许多较小的字符串创建字符串时,最有效的方法是StringBuilder。见下文。

var sb = new StringBuilder();
foreach (DataRow row in dt.Rows)
{
    foreach (DataColumn col in dt.Columns)
    {
        sb.Append(Convert.ToString(row[col])));
        sb.Append(" ");
    }
}
var fullString = sb.ToString();