· 4 years ago · May 30, 2021, 11:48 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 string strNews;
27 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(link);
28 HttpWebResponse response = (HttpWebResponse)request.GetResponse();
29 Stream stream = response.GetResponseStream();
30 StreamReader reader = new StreamReader(stream);
31 strNews = reader.ReadToEnd();
32
33 richTextBoxShowData.Text = strNews;
34
35 XmlDocument xmlNews = new XmlDocument();
36 xmlNews.LoadXml(strNews);
37 newsForm.ClearNews();
38
39 XmlNodeList childNodeList = xmlNews.DocumentElement.SelectSingleNode("channel").SelectNodes("item");
40
41 foreach (XmlNode xmlNode in childNodeList)
42 {
43 newsForm.addNewsToList(
44 xmlNode.SelectSingleNode("title").InnerText,
45 xmlNode.SelectSingleNode("link").InnerText,
46 xmlNode.SelectSingleNode("description").InnerText,
47 xmlNode.SelectSingleNode("pubDate").InnerText
48 );
49 }
50
51 showNews.Visible = true;
52 }
53
54 private void WriteDataToDB_Click(object sender, EventArgs e) // запись полученных с сайта новостей в базу данных
55 {
56 if (newsForm.newsList.Count != 0)
57 {
58 SQLiteConnection db;
59 db = new SQLiteConnection("Data Source = dataBase.db;");
60 db.Open();
61
62 new SQLiteCommand("PRAGMA synchronous = 1; CREATE TABLE IF NOT EXISTS News(Id INTEGER PRIMARY KEY AUTOINCREMENT, Title, Link, Description, PubDate); ", db).ExecuteNonQuery(); ;
63
64 new SQLiteCommand("DELETE FROM News", db).ExecuteNonQuery();
65
66 foreach (News.NewsData news in newsForm.newsList)
67 {
68 new SQLiteCommand($"INSERT INTO News(Title,Link,Description,PubDate) VALUES('{news.title}','{news.link}','{news.desc}', '{news.time}')", db).ExecuteNonQuery();
69 }
70
71 newsForm.ClearNews();
72 richTextBoxShowData.Text = "Новости записаны в базу данных.";
73 } else
74 {
75 richTextBoxShowData.Text = "Ошибка! Список новостей пуст!";
76 }
77 }
78
79 private void ReadDataFromDB_Click(object sender, EventArgs e) // выгрузка новостей из дб
80 {
81 SQLiteConnection db;
82 db = new SQLiteConnection("Data Source = dataBase.db;");
83 db.Open();
84
85 SQLiteCommand command = new SQLiteCommand("PRAGMA synchronous = 1; CREATE TABLE IF NOT EXISTS News(Id INTEGER PRIMARY KEY AUTOINCREMENT, Title, Link, Description, PubDate); ", db);
86 command.ExecuteNonQuery();
87
88 SQLiteDataReader reader = new SQLiteCommand("SELECT * FROM News", db).ExecuteReader();
89
90 newsForm.ClearNews();
91
92 foreach (IDataRecord item in reader)
93 {
94 newsForm.addNewsToList(
95 item["Title"].ToString(),
96 item["Link"].ToString(),
97 item["Description"].ToString(),
98 item["PubDate"].ToString()
99 );
100 }
101
102 richTextBoxShowData.Text = "Новости считаны из базы данных.";
103 showNews.Visible = true;
104
105 db.Close();
106 db.Dispose();
107 }
108
109 private void ShowNews_Click(object sender, EventArgs e)
110 {
111 newsForm.Show(); // открытие окна с новостями
112 }
113 }
114}
115