powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / как вернуть несколько значений из функции?
9 сообщений из 9, страница 1 из 1
как вернуть несколько значений из функции?
    #38186538
XXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.
Подскажите, пожалуйста, как мне вернуть несколько значений из функции (C#).

Допустим, у меня таблица Tabl с тремя полями pole1, pole2 и pole3. Мне нужно вернуть одной функцией эти три поля.

Сейчас у меня получается вернуть только одно поле:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
public static object getLastName(string constr, string id)
        {
            string constring;
            constring = constr;

            using (SqlConnection con = new SqlConnection(constring))
            {
                try
                {
                    con.Open();
                }
                catch
                {
                    MessageBox.Show("Ошибка открытия соединения ", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return "";
                }

                System.Data.SqlClient.SqlCommand com = con.CreateCommand();
                string str = null;
                str = " SELECT pole1 FROM dbo.tabl" +
                " WHERE  id = '" + id + "'";
                com.CommandText = str;
                com.Connection = con;
                System.Data.SqlClient.SqlDataAdapter adapt = new System.Data.SqlClient.SqlDataAdapter();
                DataTable table = new DataTable();
                adapt.SelectCommand = com;
                try
                {
                    adapt.Fill(table);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return false;
                }
                con.Close();
                try
                {
                    return table.Rows[0]["pole1"].ToString();
Вот здесь как-то нужно вернуть три поля. 
Понятно, что в запросе они должны быть все, а как их здесь вернуть не знаю. 
                }
                catch
                {
                    return "";
                }

            }

        }


Заранее большое спасибо:)
...
Рейтинг: 0 / 0
как вернуть несколько значений из функции?
    #38186541
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) public static Tuple<три поля> getLastName(string constr, string id)
2) правильнее сделать маппинг записи в экземпляр класса и возвращать его

Если у вас дататейбля, то накрайняк можно вернуть datarow
...
Рейтинг: 0 / 0
как вернуть несколько значений из функции?
    #38186592
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XXL, создай класс с тремя полями и возвращай его экземпляр
...
Рейтинг: 0 / 0
как вернуть несколько значений из функции?
    #38186600
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
3) dynamic

Код: c#
1.
2.
3.
4.
public class FooClass
{
    public dynamic Foo { get { return new { Id = 1, Title = "Название" }; } }
}
...
Рейтинг: 0 / 0
как вернуть несколько значений из функции?
    #38186614
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно словарь вернуть,
можно в XML/JSON сериализовать.
...
Рейтинг: 0 / 0
как вернуть несколько значений из функции?
    #38186622
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XXL, и, кстати, в твоем примере использование DataTable является излишним т.к. требует лишних расходов памяти. Лучше используй SqlDataReader:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
public class PersonInfo
{
	public string LastName = "";
	public string FirstName = "";
	public string MiddleName = "";
}

public static PersonInfo getLastName(string constr, int id)
{
	using (var con = new SqlConnection(constr))
	{
		SqlCommand com = con.CreateCommand();
		com.CommandText = "SELECT pole1 FROM dbo.tabl WHERE  id = " + id + "";
		com.Connection = con;

		con.Open();
		using (SqlDataReader rdr = com.ExecuteReader())
		{
			var person = new PersonInfo();
			if (rdr.Read())
			{
				person.FirstName = rdr.GetString(rdr.GetOrdinal("FirstName"));
				person.LastName = rdr.GetString(rdr.GetOrdinal("LastName"));
				person.MiddleName = rdr.GetString(rdr.GetOrdinal("MiddleName"));
			}
			return person;
		}
	}
}



Обрати внимание на пару вещей:
- тип параметра id я заменил на int т.к. подозреваю что у тебя колонка типа int. Если же id все-таки строка, то надо использовать параметры.
- перехватывать исключения и выводить MessageBox прямо в функции - очень плохая идея. Поэтому убрал это.
- переменные constring и str вообше не нужны
...
Рейтинг: 0 / 0
как вернуть несколько значений из функции?
    #38186651
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LINQ и ORM где?
...
Рейтинг: 0 / 0
как вернуть несколько значений из функции?
    #38186659
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Можно через ref


Код: c#
1.
2.
3.
4.
5.
public static bool getLastName(string constr, string id, reg string s0, ref string s1, ref string s2 ) 
{
...
return ЗапросВозвратилДанные
}
...
Рейтинг: 0 / 0
как вернуть несколько значений из функции?
    #38187164
sld
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sld
Гость
Код: c#
1.
2.
3.
4.
5.
6.
public static object getLastName(string constr, string id)
{
return new string[3] {"поле1","поле2","поле3"}
}

string[] arr_str = (string[]) getLastName("constr", "id");
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / как вернуть несколько значений из функции?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]