অন্যান্য জায়গায় এটি সহজে ব্যবহারযোগ্য করে তোলার জন্য ব্রায়ান যে উত্তর দিয়েছিল তার উত্তরটি আমি প্রসারিত করতে চেয়েছিলাম।
/// <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);
অ্যাডআররেপ্রেমেটারগুলিকে কল করার আগে আপনি কমান্ডটেক্সট সেট করেছেন তা নিশ্চিত করুন।
এছাড়াও নিশ্চিত করুন যে আপনার প্যারামিটারের নামটি আপনার বিবৃতিতে অন্য কোনও কিছুর সাথে আংশিক মিলবে না (যেমন @ অ্যাজএফচিল্ড)