2009-06-29 12 views
1

Dans ce cas, le concepteur Visual Studio génère une méthode qui prend le paramètre en tant qu'int, même si la colonne de base de données correspondante est spécifiée en tant que System.Int64.Requête TableAdapter avec un paramètre Int64 sur une connexion de données ODBC

Ceci est la requête spécifiée dans le "Query TableAdapter Assistant de configuration":

SELECT * 
FROM my_table 
WHERE "status_id" = ? 

Encore une fois, status_id est de type System.Int64. C'est ce que le concepteur génère:

public virtual DataSet1.MyDataTable GetDataByStatusId(int status_id) { ... } 

Pourquoi le paramètre n'est pas un Int64? Est-ce un bug dans Visual Studio? (J'utilise 2008 SP1.) Je peux finir par utiliser manuellement la classe OdbcCommand.

Editer: J'utilise PostgreSQL, et la colonne est spécifiée comme type bigint.

Répondre

2

D'accord, je l'ai compris. Visual Studio doit avoir été assez intelligent pour rendre le paramètre long (Int64), mais voici comment le définir manuellement:

Dans Visual Studio Data Set Designer, sélectionnez la méthode générée par l'assistant Ajouter une requête - par exemple , l'élément qui dit "FillByStatusId, GetDataByStatusId (status_id)". Dans la fenêtre des propriétés, trouvez la ligne "Paramètres" et sélectionnez "..." Cela vous permettra de définir manuellement le "DbType" sur Int64 (ou autre), ce qui a résolu mon problème.

+0

merci monsieur. m'a sauvé beaucoup de temps sur celui-là! +1 – ImGreg

0

Le type de base de données est-il long? L'int64 sera créé par le concepteur si vous avez un type autonumber dans MS Access (ce qui équivaut à un long (int64)) ... aussi, quelle base de données utilisez-vous? Edit: Avec un type de données bigint, vous devriez pouvoir utiliser des nombres jusqu'à 9223372036854775807 ... et avec un int32, jusqu'à 2147483647. En d'autres termes, vous utilisez l'équivalent PostgreSQL d'un int64, qui peut accepter tout int jusqu'à 9223372036854775807. Un int32 fonctionne parce que le nombre sera toujours valide dans cette plage. Dans .Net, vous pouvez implicitement convertir entre plusieurs types de données numériques. Par exemple, multipliez un entier par 1.0 et il deviendra un double. Il n'y a pas besoin de lancer ou convertir explicitement. Vous ne pouvez cependant pas lancer l'autre direction sans dataloss.

+0

J'utilise PostgreSQL, avec le type de données bigint. –

+0

Eh bien, je connais un int32 fonctionne (parce qu'un int32 à int64 cast est toujours valide comme vous l'avez dit), mais j'ai encore besoin d'utiliser un int64 en tant que paramètre. Visual Studio aurait dû en faire un int64. Mais j'ai compris comment changer cela. –