#c# #oledbcommand
#c# #oledbcommand
Вопрос:
У меня есть эта команда на C#:
OleDbCommand cmd = new OleDbCommand("select * from[Sheet1$]", con);
И он отлично работает, когда лист называется Sheet1, но в моем случае у листа другое имя. Как я могу этого добиться?
Я уже пробовал что-то подобное:
string sheetName = "First sheet";
OleDbCommand cmd = new OleDbCommand("select * from[" sheetName "$]", con);
Комментарии:
1. Вы пробовали без «select * from[» SheetName «]»?
2. Если это не просто ошибка копирования / вставки, у вас должен быть пробел между
from
и[
. —select * from [" sheetName "$]
Ответ №1:
Вы должны удалить пробелы из названия листа, в примере изменения:
string sheetName = "First sheet";
Для
string sheetName = "FirstSheet";
Вам не разрешается использовать пробелы в имени таблицы на основе SQL.
Ответ №2:
Если у вас возникли проблемы с получением правильных имен листов, вы можете попробовать GetOleDbSchemaTable()
получить схему и передать это значение своему OleDbCommand
. Обратите внимание, что это работает, только если вы теперь определяете местоположение вашего листа в Excel.
Надеюсь, это поможет!
objConn = new OleDbConnection(constring);
objConn.Open();
// Get the data table containg the schema guid.
var dt = objConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
var query = "select * from [" dt.Rows[0]["TABLE_NAME"].ToString() "]";
DataSet ds = new DataSet();
OleDbConnection con = new OleDbConnection(constring "");
OleDbDataAdapter da = new OleDbDataAdapter(sqlquery, con);
da.Fill(ds);
Комментарии:
1. помимо этого, вы можете попробовать заключить название листа в одинарные кавычки [‘SheetName $’]. Это должно позаботиться о разделенных пробелами именах листов, таких как «Мой лист Excel».