Запрос выбора столбцов Excel в C # winform - PullRequest
2 голосов
/ 20 июля 2010

Я пытаюсь сопоставить дату из столбца в таблице Excel, тип столбца которого - DateTime. используя следующий запрос

DateTime dtNew = Convert.ToDateTime("7/16/2010");
OleDbDataAdapter da = new OleDbDataAdapter("Select * FROM [" + SheetName + "$] where [Hand off date] = '" + dtNew + "'", conn);

Я получаю

Несоответствие типов данных в выражении критерия '.

помогите пожалуйста.

Ответы [ 2 ]

1 голос
/ 20 июля 2010

Поскольку вы используете провайдер базы данных JET (я предполагаю здесь), это означает, что строка подключения выглядит примерно так:

string connectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Temp\SOTest3.xls;Extended Properties=""Excel 8.0;HDR=YES;""";

Ваши даты должны быть заключены в знаки «#» (исключая одинарные кавычки). Это должно работать.

Вот пример, который работает для меня:

static void Main(string[] args)
{
    string connectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Temp\SOTest3.xls;Extended Properties=""Excel 8.0;HDR=YES;""";
    DbProviderFactory factory =
      DbProviderFactories.GetFactory("System.Data.OleDb");

    using (DbConnection connection = factory.CreateConnection())
    {
        connection.ConnectionString = connectionString;
        using (DbCommand command = connection.CreateCommand())
        {
            connection.Open();  //open the connection 
            DateTime dtNew = Convert.ToDateTime("7/21/2010");
            DbDataAdapter da = factory.CreateDataAdapter();
            da.SelectCommand = command;
            da.SelectCommand.Connection = connection;
            da.SelectCommand.CommandText = "SELECT * FROM [Sheet1$] WHERE [Hand Off Date] = #" + dtNew.ToString("yyyy-MM-dd") + "#";
            DataTable dtDate = new DataTable();
            da.Fill(dtDate);
            Console.WriteLine(dtDate.Rows.Count);
            Console.ReadLine();                    
        }
    }
}

Надеюсь, это поможет !!

0 голосов
/ 20 июля 2010

вы пробовали

OleDbDataAdapter da = new OleDbDataAdapter("Select * FROM [" + SheetName + "$] where [Hand off date] = '" + dtNew.ToString("yyyy-mm-dd") + "'", conn);
...