Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.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# C、 如何在Ace.OleDB中读取时更改数据类型_C#_.net_Excel_Oledb - Fatal编程技术网

C# C、 如何在Ace.OleDB中读取时更改数据类型

C# C、 如何在Ace.OleDB中读取时更改数据类型,c#,.net,excel,oledb,C#,.net,Excel,Oledb,我需要读取一个Excel文件,该文件在同一列中包含一些空白单元格和一些超过255个字符的单元格。我尝试将注册表值TypeGuessRows更改为“0”,结果成功,但无法更改服务器上的注册表 这是我的连接字符串: StrConnXLS = "provider=Microsoft.ACE.OLEDB.12.0;Data Source='" + SFileXLS + "';Extended Properties='Excel 12.0;HDR=YES;IMEX=YES;MAXSCANROWS=0;'"

我需要读取一个Excel文件,该文件在同一列中包含一些空白单元格和一些超过255个字符的单元格。我尝试将注册表值TypeGuessRows更改为“0”,结果成功,但无法更改服务器上的注册表

这是我的连接字符串:

StrConnXLS = "provider=Microsoft.ACE.OLEDB.12.0;Data Source='" + SFileXLS + "';Extended Properties='Excel 12.0;HDR=YES;IMEX=YES;MAXSCANROWS=0;'";
我通过将表传递给如下数据表来读取该表:

using (OleDbCommand cmd = new OleDbCommand("SELECT * FROM [" + tabela + "]", con))
                {


                    con.Open();

                    //conn.Open();
                    //Executando o UPDATE
                    cmd.ExecuteNonQuery();

                    OleDbDataAdapter oleAdapter = new OleDbDataAdapter();
                    oleAdapter.SelectCommand = cmd;
                    planilha = new DataTable("");
                    oleAdapter.FillSchema(planilha, SchemaType.Source);
                    oleAdapter.Fill(planilha);
                    //Fechando a conexão
                    con.Close();
                }
我读起来就像:

 foreach (DataRow row in planilha.Rows)
 {
    string dostuff = row["test"].ToString();
 }
但每次它到达超过255个字符的文本时,它都会剪切文本。
这有什么办法可以改变它吗?

我从来没有找到过。事实上,这真是讨厌。OLEDB会扫描前8行数据,并对数据类型进行假设

IMEX=1 not YES会意外地强制它找到的任何混合行为文本

据我所知,此驱动程序将忽略连接字符串中的ImportMixedTypes、TypeGuessRows和MaxScanRow。年长的喷气式飞机驾驶员支持他们。我认为这是倒退的一步

如果您的文件有一个标题行,您可以尝试HDR=No,这将强制它为文本,因为第一行是文本,但我认为这不会帮助您解决255个字符的限制问题

您可以尝试使用

SELECT * FROM [<SheetName>$<optional range>]
例如,从[MySheet$A1:A1]中选择*

但是在一个大文件上这将非常慢