Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Oledb连接和查询从excel电子表格中只读一列_C#_.net_Ado.net_Oledb - Fatal编程技术网

C# Oledb连接和查询从excel电子表格中只读一列

C# Oledb连接和查询从excel电子表格中只读一列,c#,.net,ado.net,oledb,C#,.net,Ado.net,Oledb,可能重复: 我用这段代码读取从网站加载的Excel电子表格,并显示在gridview中。我只想读一下电子表格上的A列。我想我应该能够改变这个string query=“SELECT*FROM[Sheet1$]”

可能重复:


我用这段代码读取从网站加载的Excel电子表格,并显示在
gridview
中。我只想读一下电子表格上的A列。我想我应该能够改变这个
string query=“SELECT*FROM[Sheet1$]”看起来做这件事的方法很简单
string sql=“从[sheet1$]中选择F1、F2、F3、F4、F5;

谢谢大家的评论。

我相信你的问题在于电子表格不是数据库。电子表格没有义务是矩形的或有相同类型的单元格。所以说你想要一个列是假设所有行都有该列,并且是相同类型的。所以在对其发出SQL之前,你需要转换为相同类型的向量。

以下是我用来读取Excel电子表格并将其作为数据表返回的内容,如果您关注以下部分,我可以通过循环dtSchema DataTable对象来查找不同工作表的名称,从而查询电子表格中的所有工作簿:

public static DataTable GetExcelData(string connectionString)
{
    string sql = string.Empty;
    using (OleDbConnection cn = new OleDbConnection(connectionString))
    {
        using (OleDbDataAdapter adapter = new OleDbDataAdapter())
        {
            DataTable dt = new DataTable();
            using (OleDbCommand command = cn.CreateCommand())
            {
                cn.Open();
                DataTable dtSchema = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });

                    foreach (DataRow dr in dtSchema.Rows)
                    {
                        //Will Loop through the name of each Worksheet
                        Console.WriteLine(dr["Table_Name"]);
                    }


                string firstSheetName = dtSchema.Rows[0].Field<string>("TABLE_NAME");

                sql = "SELECT * FROM [" + firstSheetName + "]";
                command.CommandText = sql;
                adapter.SelectCommand = command;
                adapter.Fill(dt);

                if (dt.Rows.Count == 0)
                {
                    OleDbDataReader reader = command.ExecuteReader();
                    dt.Load(reader);
                }
                cn.Close();
                return dt;
            }
        }
    }
}
公共静态数据表GetExcelData(字符串连接字符串)
{
stringsql=string.Empty;
使用(OLEDB连接cn=新OLEDB连接(连接字符串))
{
使用(OleDbDataAdapter=新OleDbDataAdapter())
{
DataTable dt=新的DataTable();
使用(OleDbCommand=cn.CreateCommand())
{
cn.Open();
DataTable dtSchema=cn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,新对象[]{null,null,null,“TABLE”});
foreach(dtSchema.Rows中的数据行dr)
{
//将循环遍历每个工作表的名称
控制台写入线(dr[“Table_Name”]);
}
string firstSheetName=dtSchema.Rows[0]。字段(“表名称”);
sql=“从[”+firstSheetName+“]”中选择*;
command.CommandText=sql;
adapter.SelectCommand=command;
适配器填充(dt);
如果(dt.Rows.Count==0)
{
OleDbDataReader=command.ExecuteReader();
dt.负载(读卡器);
}
cn.Close();
返回dt;
}
}
}
}

此链接可能会为您提供一些有用的信息:谢谢,我已经搜索了一段时间,但找不到它。似乎我应该能够从中学习到一些东西,但我无法真正了解正在发生的事情,它确实没有回答我问的问题,即如何从excel spreadshee中仅获取一列t、 谢谢你的回复。
public static DataTable GetExcelData(string connectionString)
{
    string sql = string.Empty;
    using (OleDbConnection cn = new OleDbConnection(connectionString))
    {
        using (OleDbDataAdapter adapter = new OleDbDataAdapter())
        {
            DataTable dt = new DataTable();
            using (OleDbCommand command = cn.CreateCommand())
            {
                cn.Open();
                DataTable dtSchema = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });

                    foreach (DataRow dr in dtSchema.Rows)
                    {
                        //Will Loop through the name of each Worksheet
                        Console.WriteLine(dr["Table_Name"]);
                    }


                string firstSheetName = dtSchema.Rows[0].Field<string>("TABLE_NAME");

                sql = "SELECT * FROM [" + firstSheetName + "]";
                command.CommandText = sql;
                adapter.SelectCommand = command;
                adapter.Fill(dt);

                if (dt.Rows.Count == 0)
                {
                    OleDbDataReader reader = command.ExecuteReader();
                    dt.Load(reader);
                }
                cn.Close();
                return dt;
            }
        }
    }
}