मैं इस उत्तर पर विस्तार करना चाहता था कि ब्रायन ने अन्य स्थानों पर इसे आसानी से प्रयोग करने योग्य बनाने में योगदान दिया।
/// <summary>
/// This will add an array of parameters to a SqlCommand. This is used for an IN statement.
/// Use the returned value for the IN part of your SQL call. (i.e. SELECT * FROM table WHERE field IN (returnValue))
/// </summary>
/// <param name="sqlCommand">The SqlCommand object to add parameters to.</param>
/// <param name="array">The array of strings that need to be added as parameters.</param>
/// <param name="paramName">What the parameter should be named.</param>
protected string AddArrayParameters(SqlCommand sqlCommand, string[] array, string paramName)
{
/* An array cannot be simply added as a parameter to a SqlCommand so we need to loop through things and add it manually.
* Each item in the array will end up being it's own SqlParameter so the return value for this must be used as part of the
* IN statement in the CommandText.
*/
var parameters = new string[array.Length];
for (int i = 0; i < array.Length; i++)
{
parameters[i] = string.Format("@{0}{1}", paramName, i);
sqlCommand.Parameters.AddWithValue(parameters[i], array[i]);
}
return string.Join(", ", parameters);
}
आप इस नए फ़ंक्शन का उपयोग इस प्रकार कर सकते हैं:
SqlCommand cmd = new SqlCommand();
string ageParameters = AddArrayParameters(cmd, agesArray, "Age");
sql = string.Format("SELECT * FROM TableA WHERE Age IN ({0})", ageParameters);
cmd.CommandText = sql;
संपादित करें: यहां एक सामान्य बदलाव है जो किसी भी प्रकार के मूल्यों की एक सरणी के साथ काम करता है और विस्तार विधि के रूप में उपयोग करने योग्य है:
public static class Extensions
{
public static void AddArrayParameters<T>(this SqlCommand cmd, string name, IEnumerable<T> values)
{
name = name.StartsWith("@") ? name : "@" + name;
var names = string.Join(", ", values.Select((value, i) => {
var paramName = name + i;
cmd.Parameters.AddWithValue(paramName, value);
return paramName;
}));
cmd.CommandText = cmd.CommandText.Replace(name, names);
}
}
फिर आप इस विस्तार विधि का उपयोग इस प्रकार कर सकते हैं:
var ageList = new List<int> { 1, 3, 5, 7, 9, 11 };
var cmd = new SqlCommand();
cmd.CommandText = "SELECT * FROM MyTable WHERE Age IN (@Age)";
cmd.AddArrayParameters("Age", ageList);
AddArrayParameters को कॉल करने से पहले सुनिश्चित करें कि आप CommandText सेट करें।
यह भी सुनिश्चित करें कि आपका पैरामीटर नाम आंशिक रूप से आपके कथन में कुछ और मेल नहीं करेगा (यानी @AgeOfChild)