C# 是否将数据表转换为字符串?

C# 是否将数据表转换为字符串?,c#,excel,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 Ole

我一直在用数据表做测试。 我想做的是从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());
}
void ExcelOpen()
{
字符串PathConn=“Provider=Microsoft.ACE.OLEDB.12.0;数据源=“+textBox1.Text+”;扩展属性=excel12.0;”;
OLEDB连接连接=新的OLEDB连接(路径连接);
OleDbDataAdapter myDataAdapter=新的OleDbDataAdapter(“从[”+textBox3.Text+“$”+Kolumn1.Text+“:“+Kolumn1.Text+”]”中选择*,康涅狄格州);
DataTable dt=新的DataTable();
myDataAdapter.Fill(dt);
dataGridView1.DataSource=dt;
//尝试将数据转换为数组。
List str=新列表();
foreach(数据行中的数据行)
{
foreach(dt.列中的数据列列列)
{
stringColumnValue+=“”+Convert.ToString(行[col]);
}
str.Add(stringColumnValue.Trim());
}
Join(“,str.ToArray());
}

使用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);
这样试试

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

    foreach(string e in s)
        Console.WriteLine(e);
List s=dt.AsEnumerable().Select(x=>x[0].ToString()).ToList();
foreach(s中的字符串e)
控制台写入线(e);

您正在strColumnValue上执行+=操作,这意味着每次执行循环时,您都会不断向该字符串添加内容

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

然后在末尾执行联接,但不将联接结果赋给任何变量,因此该语句无效。如果分配给它,它将看起来像“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();

可能重复:尝试过,键入MessageBox.Show(stringArr[0]);但是什么也没有出来。。。同时,datagrid显示了一个7点,虽然这段代码可以回答这个问题,但最好包含一些上下文,解释它是如何工作的以及何时使用它。从长远来看,只使用代码的答案是没有用的。