· 4 years ago · May 30, 2021, 11:58 PM
1using System;
2using System.IO;
3
4using System.Data;
5using System.Net;
6using System.Windows.Forms;
7
8using System.Xml;
9using System.Data.SQLite;
10
11namespace LAB_7_8
12{
13 public partial class Form1 : Form
14 {
15 News newsForm = new News();
16
17 const string link = "https://news.yandex.ru/health.rss";
18
19 public Form1()
20 {
21 InitializeComponent();
22 }
23
24 private void GetDataButton_Click(object sender, EventArgs e) // получение новостей с сайта в формате XML
25 {
26 try
27 {
28 string strNews;
29 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(link);
30 HttpWebResponse response = (HttpWebResponse)request.GetResponse();
31 Stream stream = response.GetResponseStream();
32 StreamReader reader = new StreamReader(stream);
33 strNews = reader.ReadToEnd();
34
35 richTextBoxShowData.Text = strNews;
36
37 XmlDocument xmlNews = new XmlDocument();
38 xmlNews.LoadXml(strNews);
39 newsForm.ClearNews();
40
41 XmlNodeList childNodeList = xmlNews.DocumentElement.SelectSingleNode("channel").SelectNodes("item");
42
43 foreach (XmlNode xmlNode in childNodeList)
44 {
45 newsForm.addNewsToList(
46 xmlNode.SelectSingleNode("title").InnerText,
47 xmlNode.SelectSingleNode("link").InnerText,
48 xmlNode.SelectSingleNode("description").InnerText,
49 xmlNode.SelectSingleNode("pubDate").InnerText
50 );
51 }
52
53 showNews.Visible = true;
54 } catch (Exception err)
55 {
56 richTextBoxShowData.Text = $"Ошибка получения новостей! {err.Message}";
57 }
58 }
59
60 private void WriteDataToDB_Click(object sender, EventArgs e) // запись полученных с сайта новостей в базу данных
61 {
62 try
63 {
64 if (newsForm.newsList.Count != 0)
65 {
66 SQLiteConnection db;
67 db = new SQLiteConnection("Data Source = dataBase.db;");
68 db.Open();
69
70 new SQLiteCommand("PRAGMA synchronous = 1; CREATE TABLE IF NOT EXISTS News(Id INTEGER PRIMARY KEY AUTOINCREMENT, Title, Link, Description, PubDate); ", db).ExecuteNonQuery(); ;
71
72 new SQLiteCommand("DELETE FROM News", db).ExecuteNonQuery();
73
74 foreach (News.NewsData news in newsForm.newsList)
75 {
76 new SQLiteCommand($"INSERT INTO News(Title,Link,Description,PubDate) VALUES('{news.title}','{news.link}','{news.desc}', '{news.time}')", db).ExecuteNonQuery();
77 }
78
79 newsForm.ClearNews();
80 richTextBoxShowData.Text = "Новости записаны в базу данных.";
81 }
82 else
83 {
84 richTextBoxShowData.Text = "Ошибка! Список новостей пуст!";
85 }
86 }
87 catch (Exception err)
88 {
89 richTextBoxShowData.Text = $"Ошибка записи! {err.Message}";
90 }
91 }
92
93 private void ReadDataFromDB_Click(object sender, EventArgs e) // выгрузка новостей из дб
94 {
95 try
96 {
97 SQLiteConnection db;
98 db = new SQLiteConnection("Data Source = dataBase.db;");
99 db.Open();
100
101 SQLiteCommand command = new SQLiteCommand("PRAGMA synchronous = 1; CREATE TABLE IF NOT EXISTS News(Id INTEGER PRIMARY KEY AUTOINCREMENT, Title, Link, Description, PubDate); ", db);
102 command.ExecuteNonQuery();
103
104 SQLiteDataReader reader = new SQLiteCommand("SELECT * FROM News", db).ExecuteReader();
105
106 newsForm.ClearNews();
107
108 foreach (IDataRecord item in reader)
109 {
110 newsForm.addNewsToList(
111 item["Title"].ToString(),
112 item["Link"].ToString(),
113 item["Description"].ToString(),
114 item["PubDate"].ToString()
115 );
116 }
117
118 richTextBoxShowData.Text = "Новости считаны из базы данных.";
119 showNews.Visible = true;
120
121 db.Close();
122 db.Dispose();
123 } catch (Exception err)
124 {
125 richTextBoxShowData.Text = $"Ошибка чтения! {err.Message}";
126 }
127 }
128
129 private void ShowNews_Click(object sender, EventArgs e)
130 {
131 newsForm.Show(); // открытие окна с новостями
132 }
133 }
134}
135