web-dev-qa-db-fra.com

c # instruction de sélection datable avec dates

j'essaie de faire une déclaration select sur un datatable pour obtenir la ligne qui est dans la plage de dates que je cherche. Je suis novice dans ce domaine et je ne comprends pas très bien comment fonctionne cette instruction select. J'ai essayé d'écrire ça mais ça ne marche pas. Pouvez-vous s'il vous plaît me donner un coup de main ici. je suis coincé

foundRows = dt.Select("DATE1 <= '" + date1+ "' AND DATE2 >= '" + date1+ '"');
7
George Georgiou

Outre que vos dates doivent être entourées de #, si date1 est un DateTime et non une chaîne, vous devez utiliser ToString (votre format de date) pour obtenir la déclaration SQL correcte. Pour le débogage, simplifiez la tâche si vous créez d’abord une chaîne contenant votre filtre, puis effectuez la sélection à l’aide de cette chaîne. Ensuite, vous pouvez regarder la chaîne et l'utiliser dans le générateur de requêtes pour valider votre SQL.

8
SASS_Shooter

C’est le critère de recherche optimal optimal que j’ai testé. Il vous faut des dates.

From_Date = 12/01/2012 To_Date = 12/31/2012

et Votre colonne dans DataTable sur laquelle vous postulez. (dans mon code 'date')

Votre déclaration choisie sera comme ça.

  DataRow[] rows = newTable.Select("date >= #" + from_date + "# AND date <= #" + to_date + "#");
10
DareDevil

Utiliser cela dans un composant de script SSIS. Je viens d'utiliser l'exemple ci-dessus qui inclut "#" autour des dates. Aussi j'ai converti chacun en chaîne. Cela a fonctionné parfaitement.

Juste au cas où vous voudriez savoir comment j'ai configuré cela dans SSIS: A d'abord eu un flux de données utilisant la destination du jeu d'enregistrements avec une variable Object pour stocker le jeu d'enregistrements.

dans mon script, j'ai inclus la variable en lecture seule.

Dans la classe principale ...

public class ScriptMain : UserComponent
{

OleDbDataAdapter a = new OleDbDataAdapter();
System.Data.DataTable AwardedVacTable = new System.Data.DataTable();
...
...

puis en pré-exécution ...

public override void PreExecute()
{
    base.PreExecute();

    a.Fill(AwardedVacTable, Variables.rsAwardedVac);
...
...

puis dans une méthode personnalisée accédé au datatable ...

String dtFilter = "EmployeeID = " + empId.ToString() + " AND (#" + Convert.ToString(StartDate) "# <= EndDate AND #" + Convert.ToString(StartDate) + "# >= StartDate" + " OR #" + Convert.ToString(StartDate.AddDays((double)numDays)) + "# >= StartDate AND #" + Convert.ToString(StartDate.AddDays((double)numDays)) + "# <= EndDate)";

DataRow[] Overlaps = AwardedVacTable.Select(dtFilter);
0
Tomv

expression = "Date> # 2015-1-1 #"; DataRow [] foundRows = table.Select (expression); sélectionner * du nom du fichier où Date> ' 2015-1-1 '

0
Jianghua Guo