CyberSaint Ответов: 1

Свойства связанные C#


Мне нужно отправить данные по электронной почте, а также SMS, и теперь я хочу распространить эти значения в каждом классе
я установил свойства следующим образом
пространство имен AVM_Technologies.Почтовый клиент
{
открытый класс MailClient
{

публичный струнный курс
{
получить ;
набор;
}
публичное строковое имя
{
получить ;
набор ;

}
публичная строка электронной почты
{
get; set;
}
общественный телефон строку
{
get; set;
}
публичная строка CompleteMail
{
get;set;
}
публичных строки
{ get; set; }
}
}
и когда я попытался присвоить им значение, например, на странице по умолчанию, как это
Почты клиент.Почты клиент Почты клиент = Новой почты клиент.Почты клиент();
MailClient.course = DropDownList1.SelectedItem.Текст;
MailClient.name = reservation_Name.Текст;
Почты клиент.Электронная почта = reservation_Email.Текст;
Почтовый клиент.Телефон = reservation_phone.Текст;
// кроме того, то, что мне нужно сделать, это вставить данные в БД из другого класса, так что теперь я делаю это так, у меня есть отдельный класс для вставки, как показано ниже
UserDataInsertion открытый класс
{
Почты клиент Почты клиент = Новой почты клиент();
общественного недействительными MailDataSqlInsertion()
{
// Вставка MailData в базу данных
строка Connectionstring = ConfigurationManager.ConnectionStrings["DataConnect"].Параметр connectionString;
int Eval;
пробовать
{
используя (sqlconnection с кон = новое sqlconnection(connectionString и))
{
против.Открыть();
Строка CmdText = "вставить в dbo.MailTable_Data(имя,курс,электронная почта,Телефон,CompleteMail) значения('" + MailClient.Имя + "', '" + MailClient.Курс + "','" + Почты Клиент.Почта + "','" + Почты Клиент.телефон + "','" + почты клиент.Полная почта + "'";
SqlCommand SqlCmd = new SqlCommand(CmdText, con);
Программа sqlcmd.Метод executenonquery();
против.Закрывать();
}
}
ловить
{



}
}
}
я обращаюсь к MailCientData в методе MailDataSqlInsertion (), но свойства пусты или равны нулю, пожалуйста, сообщите мне об этом ... заранее спасибо ..

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

Я сделал объект для доступа к свойствам, которые я посылаю в команде insert для хранения данных, но его значение равно нулю, можете ли вы предоставить KT об этом??

1 Ответов

Рейтинг:
9

OriginalGriff

Проблема в том, что вы не используете существующий экземпляр a MailClient В вашем MailDataSqlInsertion метод, но новый, пустой:

MailClient MailClient = new MailClient();
public void MailDataSqlInsertion()
    {
    ...
    String CmdText = "insert into dbo.MailTable_Data(Name,Course,Email,Phone,CompleteMail) Values('" + MailClient.Name + "','" + MailClient.Course + "','" + MailClient.Email + "','" + MailClient.phone + "','" +
Вы новичок, чтобы не создавать ne winstance здесь, но использовать тот, который передается вам.
Есть два способа сделать это:
1) Сделайте так, чтобы MailClient экземпляр параметра для MailDataSqlInsertion метод, поэтому вы должны передавать данные каждый раз, когда используете его.
2) Сделайте так, чтобы UserDataInsertion конструктор класса требует MailClient параметр и сохраните его для того, когда он понадобится позже.

Первый вариант является наиболее гибким, так как вы можете повторно использовать UserDataInsertion пример для нескольких сообщений подряд.

Но что бы вы ни делали, не делайте так работу с базой данных! Никогда не объединяйте строки для построения команды 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;
Вполне допустимая команда "удалить таблицу"
--'
А все остальное-это комментарии.
Так оно и происходит: выбирает любые совпадающие строки, удаляет таблицу из базы данных и игнорирует все остальное.

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


CyberSaint

Хороший один я использовал параметризованный подход большое спасибо и спасибо за просветление запроса я позабочусь обо всем этом.... спасибо братан и да у меня есть другой сервер для резервного копирования, который мы регулярно использовали каждую неделю Спасибо

OriginalGriff

Всегда пожалуйста!