2012-01-09 1 views
2

Hey, je souhaite afficher certaines données avec ma procédure stockée au cours des 30 derniers jours. voici ce que je l'ai fait (aspx.cs fichier):Définition de DateTime en tant que paramètre SqlDataSource pour Gridview

protected void Page_Load(object sender, EventArgs e)  
     { 
      DateTime toDate, fromDate; 
      toDate = DateTime.Now; 

      fromDate = toDate.Subtract(new TimeSpan(31, 0, 0, 0)); 

      SqlDataSource1.SelectParameters.Add("fromDate", DbType.DateTime, fromDate.ToString()); 
      SqlDataSource1.SelectParameters.Add("toDate", DbType.DateTime, toDate.ToString());      

    } 

ici est mon fichier ASPX

<form id="form1" runat="server"> 
     <asp:GridView ID="GridView1" runat="server" AllowPaging="True" AllowSorting="True" AutoGenerateColumns="False" Width="232px" DataKeyNames="CustomerId" DataSourceID="SqlDataSource1"> 
      <Columns> 
       <asp:BoundField DataField="CreationDate" HeaderText="CreationDate" SortExpression="CreationDate" /> 
      </Columns> 
     </asp:GridView> 
     <br /> 
     <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:SSEnewConnectionString %>" 
      SelectCommand="procCustomer_SelectbyCreationDate" SelectCommandType="StoredProcedure"> 
      <SelectParameters> 
       <asp:Parameter DbType="DateTime" Name="fromDate" /> 
       <asp:Parameter DbType="DateTime" Name="toDate" /> 
      </SelectParameters> 
     </asp:SqlDataSource> 
     </form> 

quand je teste ce mon écran est en blanc (autres que les éléments de masterpage) et pas les erreurs. des idées?

+0

Eh bien, avez-vous des données ici? – V4Vendetta

Répondre

2

EDIT: Même si une version antérieure de cette réponse a été acceptée, il semble que j'ai mal compris le type de paramètre utilisé. Le web controls ParameterCollection semble un peu affreux. Je suggérerais de convertir les valeurs de date en format SQL (autant que cela me gêne, franchement - les conversions de chaînes doivent être évitées autant que possible). Par exemple:

SqlDataSource1.SelectParameters.Add("fromDate", DbType.DateTime, 
    fromDate.ToString("yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture)); 
SqlDataSource1.SelectParameters.Add("toDate", DbType.DateTime, 
    toDate.ToString("yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture)); 

(Changer de yyyy-MM-dd pour les types de date uniquement.)

Je ne l'ai pas utilisé moi-même SqlDataSource, mais aussi semble comme vous introduisez les paramètres deux fois - une fois le balisage, et une fois dans le code. Étant donné que vous n'avez pas les valeurs dans le balisage (y compris dans les liaisons), vous voudrez peut-être les supprimer de là - mais je peux me tromper sur ce front.

Si votre requête ne répond pas à vos attentes, vérifiez vos journaux de base de données (ou tout autre outil approprié) pour vérifier quelle requête réelle est en cours d'exécution.

+1

Si je supprime le toString() j'obtiens l'erreur suivante \t "La meilleure méthode surchargée pour 'System.Web.UI.WebControls.ParameterCollection.Add (chaîne, System.Data.DbType, chaîne)' a quelques arguments invalides" – user1051364

+1

aussi, en supprimant les paramètres du fichier aspx semblait résoudre le problème ... au moins, je reçois quelques données sur l'écran maintenant. J'ai dû utiliser la conversion toString() si ... – user1051364

+0

J'ai exactement le même problème. La méthode .Add n'autorise que les chaînes et, dans mon cas, provoque une erreur dans le SQL. Pas vraiment sûr de savoir comment procéder. – carny666

Questions connexes