J'ai une méthode que je veux utiliser différemment en fonction du type d'entrée. Voilà ce que j'ai:C# reconnaître sql uniqueidentifier
public static DataTable GetS(string source = null, string customer = null)
{
if (source != null && customer == null)
{
return GetDataTableFromQuery("db.GetS", new object[] { "@source", source });
}
else if (source == null && customer != null)
{
return GetDataTableFromQuery("db.GetS", new object[] { "@customer", customer });
}
else
{
throw new Exception("Bad input. Call GetS with GetS(source) or GetS(null,customer).");
}
}
Le sp ressemble à ceci:
CREATE PROCEDURE [db].[GetS]
@source as nvarchar(128) = NULL,
@customer as nvarchar(128) = NULL
AS
BEGIN
IF @customer IS NULL
BEGIN
SELECT
*
FROM
db.S
WHERE
[Source] = @source
END
IF @source IS NULL
BEGIN
SELECT
*
FROM
db.S
WHERE
customer = @customer
END
END
Cela fonctionne bien pour GetS(source)
et GetS(null,customer)
mais j'ai 2 questions.
- il va mal si quelqu'un devait appeler avec
GetS(customer)
- il ne semble pas très joli ..
est-il un moyen de faire quelque chose comme ça (pseudo-code):
public static DataTable GetS(string input)
{
if(input is sql-uniqueidentifier)
{
return GetDataTableFromQuery("db.GetS", new object[] { "@source", input});
}
else
{
return GetDataTableFromQuery("db.GetS", new object[] { "@customer", input]);
}
}
ou existe-t-il un meilleur moyen? (Bien sûr, je pourrais faire 2 méthodes séparées, mais je voudrais le faire fonctionner avec un seul Get
-method.Semble bizarre si je fais un GetSBySource
ou quelque chose).
Quel est le problème exact? Erreurs de développeur? Pourquoi voulez-vous mettre cela en une seule méthode? Y aura-t-il un cas où vous voulez passer les deux valeurs? Quelle est l'utilisation de 'sql-identifier'? –
Je pense que c'est plus sur l'architecture – BendEg
Si 'source' est supposé être un identifiant unque alors pourquoi est-ce un' string' et pas un 'Guid'? – juharr