#c# #.net #oledb
#c# #.net #oledb
Вопрос:
пример функции возврата, которая возвращает только строковое значение, как мне вернуть несколько значений, состоящих из разных типов данных, в одной записи, просто вызвав одну функцию?
public static string selectPassword(string user)
{
using (var connection = new OleDbConnection(connectionString))
using (var command = connection.CreateCommand())
{
command.Parameters.AddWithValue("@user", user);
command.CommandText = "SELECT [Password] FROM [Password_Table] WHERE Password_ID = [@user]";
command.CommandType = CommandType.Text;
connection.Open();
var value = command.ExecuteScalar();
return value == DBNull.Value ? null : value.ToString();
}
}
в моей записи будет выполняться поиск по имени участника, и ей потребуется вернуть поля Participant_Name, Participant_ID, Address, Contact_Number amp; Gender, Все из которых состоят из строки, целых чисел и т. Д..
Ответ №1:
Создайте тип данных, состоящий из полей и свойств, которые могут содержать информацию, которую вы хотите получить.
Заполните экземпляр этого типа в вашем методе и верните его.
Что-то вроде этого, например:
public class Participant
{
public int Id { get; private set; }
public string Name {get; set;}
public string Address {get; set; }
public Participant( int id, string name, string address )
{
this.Id = id;
this.Name = name;
this.Address = address;
}
}
public Participant GetParticipant( string name )
{
using( var conn = new OleDbConnection (connectionString) )
{
using( var cmd = connection.CreateCommand() )
{
command.CommandText = "SELECT [Id], [Name], [Address] FROM Participant WHERE [name] LIKE @p_name";
command.Parameters.Add ("@p_name", OleDbType.VarChar).Value = name "%";
using( var reader = command.ExecuteReader() )
{
if( !reader.HasRows() ) return null;
reader.Read();
return new Participant (reader.GetString("Id"), reader.GetString("name"), reader.GetString("address"));
}
}
}
}
Примечание: могут быть синтаксические ошибки, поскольку я не проверял это через компилятор, но я думаю, вы поймете, в чем дело.
Комментарии:
1. это блестяще, если у него есть определенная сущность, это лучшее решение. Или он также может вернуть DataRow или его itemArray напрямую. но 1 для вас, поскольку я написал свой ответ, имея в виду и thin. В реальных приложениях всегда должна быть бизнес-сущность для каждого типа записи в любом случае.
2. Должно быть, я пропустил это! Это потрясающее решение, я не знал, что это может быть простым, но элегантным решением! Я не говорю, что другие ответы неверны, но это мне больше всего нравится в том, что я знаю в настоящее время! спасибо всем!
Ответ №2:
для ваших нужд вы должны вернуть DataRow
объект или массив объектов, который вы можете получить, вызвав .ItemArray
DataRow
что вам нужно изменить в вашем методе выше, так это использовать a DataAdapter
и вызвать его Fill
метод для заполнения таблицы данных, а затем вернуть первую строку такой таблицы данных, если присутствует какая-либо строка.
вы также можете сделать это с помощью DataReader, но тогда вам следует создать контейнер array или objects для возврата самостоятельно… Я думаю, что поток данных.itemArray быстрее кодируется.
Комментарии:
1. быстрее кодировать, но имхо не так удобно в использовании, поскольку простой поток данных не вводится.