Afzaal Ahmad Zeeshan
Это потребовало бы введения в дженерики здесь и изменения результата, который вы вернете в конце концов. Но вот кое-что, что может помочь вам начать:
// Add the T for type annotation.
public static List<T> ExecuteProcedureReturnString<T>(string connString, string procName, params SqlParameter[] paramters)
{
List<T> result = new List<T>(); // Change the variable.
using (var sqlConnection = new SqlConnection(connString))
{
using (var command = sqlConnection.CreateCommand())
{
command.CommandType = System.Data.CommandType.StoredProcedure;
command.CommandText = procName;
if (paramters != null)
{
command.Parameters.AddRange(paramters);
}
sqlConnection.Open();
// This would change from scalar to query; ExecuteQuery()
var ret = command.ExecuteQuery();
if (ret != null)
// Fill in the results.
}
}
return result;
}
Эта страница поможет вам в запросе данных и создании пользовательского списка для входных данных. Я не стал изменять большую часть кода, так как это только нарушило бы сборку и вызвало бы еще большую путаницу. Ты можешь позаботиться об этом.
Извлечение данных с помощью DataReader | Microsoft Docs[
^]
Подробнее о дженерики в C# здесь,
Generics - Руководство По Программированию На C# | Microsoft Docs[
^], было бы удивительно, если бы вы могли создать Тип C# и использовать его вместо дженериков — так как это очистило бы много путаницы в коде для начала.
Это будет работать просто отлично, так как вы возвращаете список целых чисел,
public static List<int> ExecuteProcedureReturnString(string connString, string procName, params SqlParameter[] paramters)
{
Затем верните список целых чисел из вашего кода.
ahmed_sa
спасибо Вам большое но оставшиеся некоторые моменты не понимаю о втором ответе или посте
на самом деле мне нужна функция generic в качестве второго потока, но что-то не ясно
1 - что вы имеете в виду под executequery
команды нет запроса запустите
2 - Как заполнить данные или результат, пожалуйста
можете ли вы выполнить вторую функцию, если это возможно
Afzaal Ahmad Zeeshan
Существует разница в ExecuteScalar и ExecuteQuery, пожалуйста, прочитайте их документацию, чтобы узнать об этой разнице — быстрый ответ заключается в том, что ExecuteQuery вернет записи, а ExecuteScalar вернет количество обработанных строк.
Чтобы заполнить данные в строки, вы используете DataReader, а затем вы можете просто использовать индексаторы ([]) для доступа к значению столбца. Пожалуйста, проверьте ссылку, которую я предоставил для DataReader, в ней есть ответ на ваш вопрос. :-)
phil.o
Точнее, ExecuteScalar
возвращает первый столбец первой строки. Он часто используется для возврата результата функции count, но это не значит, что он всегда будет возвращать количество строк.