Abdalla Ben Omran Ответов: 1

Что изменится, если метод вернет обратно 'class' или datetable ?


в настоящее время метод ретурирует обратно DataTable, и он должен вернуть обратно класс. это похоже на задачу, но почему, что отличается ? и как это могло бы выглядеть ?

обычный код делает следующее: "посмотрите, что вы пробовали".

поэтому теперь я хотел бы сделать какой-то метод, но вернуть обратно класс со свойствами

Что я уже пробовал:

public static DataTable GetSend(string IP, string User)
{
string sSql "some query with join";
if (User != string.Empty)
{
sSQL += " and CrtUser = '" + User + "'";

}
and the same with IP
and the end
System.Diagnostics.Debug.WriteLine(sSQL);

SqlConnection con = getSQL_Connection();

return GetDataTable(ref con, sSQL);
}

F-ES Sitecore

Что вы подразумеваете под словом "класс"? Технически DataTable * - это класс.

[no name]

я имею в виду, а не публичный статический DateTable GetSend .. я хотел создать например класс публичный статический отправить GetSend потом я заполняю некоторые свойства внутренний класс .

Afzaal Ahmad Zeeshan

Возвращает ли он Task<datatable>? Ваш вопрос очень запутан в его нынешнем виде.

[no name]

да, он возвращает datatable обратно, но я хочу сделать класс со свойствами, а затем вернуть класс обратно ... сделай это сейчас же !

CHill60

Вам нужно использовать ссылку "ответить", если вы хотите ответить на комментарий - в противном случае участник не будет уведомлен о вашем ответе

1 Ответов

Рейтинг:
12

OriginalGriff

Хотя это не невозможно - или даже трудно вернуть класс вместо DataTable, это не то, с чем мы можем вам помочь, и о чем вам нужно подумать довольно тщательно.

Во-первых: DataTable-это не отдельный элемент данных, в то время как класс, который вы описываете, является:

Цитата:
я хочу сделать класс со свойствами, а затем вернуть класс обратно

А класс это легко:
public class MyClass
   {
   public int ID { get; set; }
   public string UserName { get; set; }
   public string UserType  { get; set; }
   }
Создайте экземпляр в своем методе, заполните его и верните обратно.

Но DataTable содержит данные о многих строках: поэтому вы, вероятно, не хотите, чтобы ваш метод возвращал "класс", а коллекцию классов: возможно, список<MyClass>

Подумайте о том, что именно вы пытаетесь сделать, и что ваша DataTable в настоящее время содержит, и это должно быть довольно тривиально для вас, чтобы построить соответствующий класс и вернуть его или его коллекцию.

Но мы не можем сделать это для вас!



Цитата:
обычный код делает следующее :
public static DataTable GetSend(string IP, string User)
{
строка sSql "некоторый запрос с соединением";
if (User != string.Пустой)
{
sSQL += " и CrtUser = '" + User + "'";

}

Не делай этого так! Никогда не объединяйте строки для построения команды SQL. Это оставляет вас широко открытыми для случайной или преднамеренной атаки SQL-инъекции, которая может уничтожить всю вашу базу данных. Вместо этого всегда используйте параметризованные запросы.

Когда вы объединяете строки, вы вызываете проблемы, потому что SQL получает такие команды, как:
SELECT * FROM MyTable WHERE StreetAddress = 'Baker's Wood'
Цитата, добавленная пользователем, завершает строку в том, что касается SQL, и вы получаете проблемы. Но могло быть и хуже. Если я приду и наберу вместо этого: "x';DROP TABLE MyTable;--", то SQL получит совсем другую команду:
SELECT * FROM MyTable WHERE StreetAddress = 'x';DROP TABLE MyTable;--'
Которые SQL видит как три отдельные команды:
SELECT * FROM MyTable WHERE StreetAddress = 'x';
Совершенно правильный выбор
DROP TABLE MyTable;
Вполне допустимая команда "удалить таблицу"
--'
А все остальное-это комментарии.
Так оно и происходит: выбирает любые совпадающие строки, удаляет таблицу из базы данных и игнорирует все остальное.

Поэтому всегда используйте параметризованные запросы! Или будьте готовы часто восстанавливать свою БД из резервной копии. Вы ведь регулярно делаете резервные копии, не так ли?

И этот код бесполезен для нас: мы все еще не знаем, что находится в DataTable, поэтому мы все еще не можем вам помочь.


[no name]

обычный код делает следующее :
public static DataTable GetSend(string IP, string User)
{
строка sSql "некоторый запрос с соединением";
if (User != string.Пустой)
{
sSQL += " и CrtUser = '" + User + "'";

}
и то же самое с IP
и конец всему
Система.Диагностика.Отлаживать.WriteLine(sSQL);

Объект sqlconnection кон = getSQL_Connection();

return GetDataTable(ref con, sSQL);
}

поэтому теперь я хотел бы сделать какой-то метод, но вернуть обратно класс со свойствами

BillWoodruff

Пожалуйста, отредактируйте свой оригинальный пост и добавьте эту информацию.

[no name]

я сделал

OriginalGriff

Ответ обновлен.

[no name]

Спасибо за помощь полу и объяснение.. код не от меня, и я пытаюсь его переработать . вы предпочитаете использовать EF ?