Ce SELECT trouve Kelly comme prévu:En utilisant C# pour SELECT par rapport à Excel, comment est-ce que je rends le cas-INsensitive?
sélectionnez [Prénom], [Nom], Téléphone de [Data $] où [First Name] comme "% Kelly%"
Dans la feuille de calcul Excel, le premier nom est "Kelly" avec une majuscule "K" - et le SELECT spécifie aussi un "K" majuscule.
Cependant, si le K> comme "% Kelly%" < est de type LOWER-case "% kelly%" - alors l'enregistrement est introuvable. Le SELECT est sensible à la casse.
SQL Server ne semble pas avoir une méthode inférieure() ou lcase() que je peux appliquer à la colonne de base de données (??? !!!). Est-ce vrai? Un conseil généralisé sur le réseau, pour ajouter "COLLATE SQL_Latin1_General_CP1_CI_AS" à l'instruction SQL, génère l'erreur "IErrorInfo.GetDescription a échoué 0x80004005" lorsque ExecuteReader() est exécuté.
Quelqu'un peut-il suggérer un moyen de rendre mon SQL SELECT contre Excel cas-INsensitive?
J'ai collé le code ci-dessous.
(La méthode f.vs() renvoie vrai lorsqu'il est passé une chaîne valide, à savoir celui pour lequel IsEmptyOrNull() est fausse.)
TIA - Hoytster
// The user may specify the first or last names, or category, or // any combination, possibly all three.
// Build the select; [Data$] is the name of the worksheet
string select = "select [First Name], [Last Name], Phone from [Data$] where ";
if (f.vs(firstName))
select += "[First Name] like \"%" + firstName + "%\" and ";
if (f.vs(lastName))
select += "[Last Name] like \"%" + lastName + "%\" and ";
if (f.vs(category))
select += "[Category] = \"" + category + "\" and ";
select = select.Substring(0, select.Length - 4); // Lose the terminal "and "
// This makes the SQL case-insensitive! BUT IT CAUSES ExecuteReader() FAIL
// select += " [COLLATE SQL_Latin1_General_CP1_CI_AS]";
// Build the connect string, using the specified Excel address file
string connectionString =
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +
@excelAddressFile +
";Extended Properties=Excel 8.0;";
// Get a DB connection from an OLE DB provider factory
DbProviderFactory factory = DbProviderFactories.GetFactory("System.Data.OleDb");
using (DbConnection connection = factory.CreateConnection())
{
// Assign the connection string
connection.ConnectionString = connectionString;
// Create the DB command
using (DbCommand command = connection.CreateCommand())
{
// Apply the select
command.CommandText = select;
// Retrieve the data -- THIS ExecuteReader() IS WHERE IT FAILS
using (DbDataReader dr = command.ExecuteReader())
{
while (dr.Read())
{
Cela a fonctionné, grâce muchly, Ken! Excel n'est pas SQL Server, duh! :) – hoytster