· 4 years ago · May 30, 2021, 11:46 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 SQLiteConnection db;
57 db = new SQLiteConnection("Data Source = dataBase.db;");
58 db.Open();
59
60 new SQLiteCommand("PRAGMA synchronous = 1; CREATE TABLE IF NOT EXISTS News(Id INTEGER PRIMARY KEY AUTOINCREMENT, Title, Link, Description, PubDate); ", db).ExecuteNonQuery(); ;
61
62 new SQLiteCommand("DELETE FROM News", db).ExecuteNonQuery();
63
64 foreach (News.NewsData news in newsForm.newsList) {
65 new SQLiteCommand($"INSERT INTO News(Title,Link,Description,PubDate) VALUES('{news.title}','{news.link}','{news.desc}', '{news.time}')", db).ExecuteNonQuery();
66 }
67
68 newsForm.ClearNews();
69 richTextBoxShowData.Text = "Новости записаны в базу данных.";
70 }
71
72 private void ReadDataFromDB_Click(object sender, EventArgs e) // выгрузка новостей из дб
73 {
74 SQLiteConnection db;
75 db = new SQLiteConnection("Data Source = dataBase.db;");
76 db.Open();
77
78 SQLiteCommand command = new SQLiteCommand("PRAGMA synchronous = 1; CREATE TABLE IF NOT EXISTS News(Id INTEGER PRIMARY KEY AUTOINCREMENT, Title, Link, Description, PubDate); ", db);
79 command.ExecuteNonQuery();
80
81 SQLiteDataReader reader = new SQLiteCommand("SELECT * FROM News", db).ExecuteReader();
82
83 newsForm.ClearNews();
84
85 foreach (IDataRecord item in reader)
86 {
87 newsForm.addNewsToList(
88 item["Title"].ToString(),
89 item["Link"].ToString(),
90 item["Description"].ToString(),
91 item["PubDate"].ToString()
92 );
93 }
94
95 richTextBoxShowData.Text = "Новости считаны из базы данных.";
96 showNews.Visible = true;
97
98 db.Close();
99 db.Dispose();
100 }
101
102 private void ShowNews_Click(object sender, EventArgs e)
103 {
104 newsForm.Show(); // открытие окна с новостями
105 }
106 }
107}
108