2017-03-03 42 views
1

此代码正常工作。但是当我想改变范围时,给出OleDBException。C#Excel查询问题

OleDbCommand dates = new OleDbCommand("SELECT date FROM ["Sheet1$A1:B150"] ", baglanti); 
OleDbDataReader reader= dates.ExecuteReader(); 
while (reader.Read()) 
{ 
    list.Add(reader["date"]); 
} 

范围内变化的版本:

OleDbCommand dates = new OleDbCommand("SELECT date FROM ["Sheet1$A250:B350"] ", baglanti); 
OleDbDataReader reader= dates.ExecuteReader(); 

while (reader.Read()) 
{ 
    list.Add(reader["date"]); 
} 

的例外是:

System.Data.OleDb.OleDbException was unhandled by user code 
ErrorCode=-2147217904 
HResult=-2147217904 
Message=No value is entered for one or more required parameters. 
Source=Microsoft Access Database Engine 
StackTrace: 
konum: System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr) 
konum: System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult) 
konum: System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult) 
konum: System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method) 
konum: System.Data.OleDb.OleDbCommand.ExecuteReader(CommandBehavior behavior) 
konum: Hasta_Bulucu.Form1.bul_DoWork(Object sender, DoWorkEventArgs e) C:\Users\Furka\documents\visual studio 2015\Projects\Hasta Bulucu\Hasta  Bulucu\Form1.cs içinde: satır 269 
konum: System.ComponentModel.BackgroundWorker.OnDoWork(DoWorkEventArgs e) 
konum: System.ComponentModel.BackgroundWorker.WorkerThreadStart(Object argument) 
InnerException: 
+0

请问您可以添加您用来初始化OledDbConnection的连接字符串吗? – andrews

+0

@andrews OleDbConnection baglanti = new OleDbConnection(@“Provider = Microsoft.ACE.OLEDB.12.0; Data Source =”+ filePick.FileName.ToString()+“; Mode = Read; Extended Properties ='Excel 12.0 xml; HDR = YES; IMEX = 1;'“); –

+0

@andrews当我将范围A1设置为R250时,它包含工作表的标题,但A150至R300不包括标题。所以sql命令找不到列名。我需要在这个选项中包含标题信息。那么该怎么做呢? –

回答

1

尝试以下操作:

设置HDR=NO在连接字符串中,如:

OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + 
         filePick.FileName.ToString() + 
";Mode=Read;Extended Properties='Excel 12.0 xml;HDR=NO;IMEX=1;'"); 

也尝试将IMEX设置为0和2并尝试使用HDR = NO的不同组合。

如果范围不包括列名称,则可能会出错。因此,您需要尝试按列索引读取文件,而不是名称。

+0

列索引的想法是有道理的。但我坚持在SQL。我不能通过columnID查询像A,B,C ....我试着从[Sheet1 $]选择一个,但仍然会抛出异常(HDR = NO)@andrews –

+0

@FK是的,我想过但没有能力找到任何样品。如果您尝试使用R1C1符号怎么办?或者按照索引'[1]'查询列。还要做'SELECT *'并在调试器中打开结果集,并尝试查看那里的列/字段名称。 – andrews

+0

@adrews终于完成了。它必须是F1 ..... Fn不是直接的列名,如A,B等。再次感谢你。 –