【问题标题】:Convert an Data Table to a string?将数据表转换为字符串?
【发布时间】:2015-10-29 12:52:23
【问题描述】:

数据表一直存在问题。 我想做的是从 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());
}

【问题讨论】:

标签: c# excel


【解决方案1】:

您在 strColumnValue 上执行 +=,这意味着每次执行循环时,您都会不断添加到该字符串。

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

然后你在最后进行连接,但你没有将连接的结果分配给任何变量,所以该语句没有效果。如果它被分配,它看起来像“A AB ABC”

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

当您从许多较小的字符串创建字符串时,最有效的方法是 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();

【讨论】:

    【解决方案2】:

    使用 DataRow 的 ItemArray 属性。试试下面的方法。

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

    注意事项:

    以下查询对 SQL 注入攻击开放。您应该在 sql 语句中使用参数而不是字符串连接。

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

    【讨论】:

    • 试过了,输入 MessageBox.Show(stringArr[0]);但一无所获...同时数据网格显示 7
    【解决方案3】:

    试试这个方法

    List<string> s = dt.AsEnumerable().Select(x => x[0].ToString()).ToList();
    
        foreach(string e in s)
            Console.WriteLine(e);
    

    【讨论】:

    • 虽然这段代码可以回答这个问题,但最好包含一些上下文,解释它是如何工作的以及何时使用它。从长远来看,纯代码的答案没有用处。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-16
    • 1970-01-01
    • 1970-01-01
    • 2022-08-17
    相关资源
    最近更新 更多