J'ai cette procédure stockée dans mon SQL Server;
CREATE PROC GetChild @Child_ID int AS SELECT * FROM Children WHERE Child_ID = @Child_ID
J'appelle cette procédure stockée de C #.
Je voudrais savoir, s'il est possible d'appeler seulement une colonne de cette table au lieu de l'set de l'logging de C #.
En supposant que vous voulez dire returnner une colonne, si c'est ce que votre procédure stockée ressemble, alors non. Il returnnera toujours toutes les colonnes au client.
Vous pouvez simplement ignorer les colonnes renvoyées dont vous n'avez pas besoin. Vous pouvez également modifier la procédure stockée pour renvoyer uniquement une colonne. Mais tel quel, il les renvoie toujours tous.
Vous n'avez que trois choix.
Réécrivez la procédure stockée pour simplement returnner les colonnes que vous voulez.
Exemple: SELECT foo from Children Where Child_id = @Child_ID
Utilisez un DataReader et obtenez simplement les colonnes que vous voulez
Utiliser un lecteur directement
while (reader.Read())
`Console.WriteLine("{0}", reader.GetInt32(0));`
En utilisant les methods d'extension Linq qui vous permet de filterr et sortinger les résultats ainsi que d'get seulement les colonnes que vous voulez.
var List = rdr.Cast<IDataRecord>() .Select(s => s.GetInt32(0)).ToList();
Abandonnez la procédure stockée et écrivez les instructions Select sur la table. Voir la réponse de Pranay
écrivez juste ci-dessous la requête
select columnname from Children where Child_ID = @Child_ID
nom_colonne: nom de la colonne que vous souhaitez récupérer
Code pour vous
SqlConnection mySqlConnection =new SqlConnection("server=(local)\\SQLEXPRESS;database=MyDatabase;Integrated Security=SSPI;"); SqlCommand mySqlCommand = mySqlConnection.CreateCommand(); mySqlCommand.CommandText ="select columnname from Children where Child_ID = @Child_ID"; mySqlCommand .Parameters.Add("@Child_ID", SqlDbType.Int); mySqlCommand .Parameters["@Child_ID"].Value = idvalue; mySqlConnection.Open(); SqlDataReader mySqlDataReader = mySqlCommand.ExecuteReader(CommandBehavior.SingleRow); while (mySqlDataReader.Read()){ Console.WriteLine("mySqlDataReader[\" columnname\"] = " + mySqlDataReader["columnname"]); } mySqlDataReader.Close(); mySqlConnection.Close();
Utilisez un SqlDataReader
pour cela:
SqlConnection DbConn = new SqlConnection(YourConnSsortingngHere); SqlCommand ExecStoredProc = new SqlCommand(); ExecStoredProc.CommandType = CommandType.StoredProcedure; ExecStoredProc.CommandText = "GetChild"; ExecStoredProc.Connection = DbConn; ExecStoredProc.Parameters.AddWithValue("@ChildID", YourChildId); using (DbConn) { DbConn.Open(); using (SqlDataReader sdr = ExecStoredProc.ExecuteReader()) { while(sdr.Read()) // reference your column name like this: // sdr.GetSsortingng(sdr.GetOrdinal("YourColumnName")); } }
Vous pouvez referencer n'importe quelle colonne renvoyée par la méthode SqlDataReader.Read()
. De même, si vous searchz une valeur entière:
int someInt = sdr.GetInt32(sdr.GetOrdinal("YourColumnName"));
À partir de ce thread ( Insérez les résultats d'une procédure stockée dans une table temporaire ), vous pouvez essayer OPENROWSET.
D'abord, configurez votre database,
sp_configure 'Show Advanced Options', 1 GO RECONFIGURE GO sp_configure 'Ad Hoc Dissortingbuted Queries', 1 GO RECONFIGURE GO
Ensuite, en fonction de votre connection:
SELECT yourcolumnname FROM OPENROWSET( 'SQLNCLI', 'server=yourservername;database=yourdbname;uid=youruserid;pwd=youruserpwd', 'EXEC [GetChild] yourchildid' )
ou
SELECT yourcolumnname FROM OPENROWSET( 'SQLNCLI', 'server=yourservername;database=yourdbname;Trusted_Connection=yes', 'EXEC [GetChild] yourchildid')
Je n'utiliserais pas cette solution lors de la récupération d'une seule ligne. La performance serait vraiment mauvaise. Pour récupérer un grand nombre de lignes, cela devrait faire l'affaire.