Каким образом я могу получить данные из var и вставить их в базу данных?
Я столкнулся с проблемой вызова данных для вставки в базу данных, но это не удалось. Это консольное приложение, которое сканирует данные веб-сайта. Теперь я хочу сохранить свои данные об этом обходе, стараясь изо всех сил, но не получая должного результата.Хотите показать эти данные
using System; using System.Collections.Generic; using System.Linq; using System.Net.Http; using System.Text; using System.Threading.Tasks; using HtmlAgilityPack; using System.Data.SqlClient; namespace ZamenCrawler { class Program { static void Main(string[] args) { SqlConnection con; string var; var name; var price; var image; var link; try { var = @"Data Source=.;Initial Catalog=WebCrawler;Integrated Security=True"; con = new SqlConnection(var); con.Open(); Console.WriteLine("DataBase Connected"); string query = "Insert into details(Name,Price,Image,Link) VALUES ('" + name + "'," + price + "," + image + "," + link + ")"; SqlCommand ins = new SqlCommand(query,con); ins.ExecuteNonQuery(); Console.WriteLine("\n Data Stored in Database"); string q = "Select * from CrawlerDetails"; SqlCommand view = new SqlCommand(q, con); SqlDataReader dr = view.ExecuteReader(); while (dr.Read()) { Console.WriteLine("Name:"+dr.GetValue(1).ToString()); Console.WriteLine("\nPrice:" + dr.GetValue(2).ToString()); Console.WriteLine("\nImage:" + dr.GetValue(3).ToString()); Console.WriteLine("\nLink:" + dr.GetValue(4).ToString()); } con.Close(); } catch (SqlException x) { Console.WriteLine(x.Message); } SrtartCrowlerAsync(); Console.ReadLine(); } private static async Task SrtartCrowlerAsync() { var url = "https://www.olx.com.pk/property-for-rent/"; var httpClient = new HttpClient(); var html = await httpClient.GetStringAsync(url); var htmlDocument = new HtmlDocument(); htmlDocument.LoadHtml(html); var divs = htmlDocument.DocumentNode.Descendants("td") .Where(node => node.GetAttributeValue("class", "") .Equals("offer onclick ")).ToList(); var homes = new List<Home>(); foreach (var td in divs) { var name = td?.Descendants("h3")?.FirstOrDefault()?.InnerText; var price = td?.Descendants("strong")?.FirstOrDefault()?.InnerText; var image = td?.Descendants("img")?.FirstOrDefault()? .ChildAttributes("src")?.FirstOrDefault()?.Value; var link = td?.Descendants("a")?.FirstOrDefault()? .ChildAttributes("href")?.FirstOrDefault()?.Value; var home = new Home { Area = td?.Descendants("h3")?.FirstOrDefault()?.InnerText, Price = td?.Descendants("strong")?.FirstOrDefault()?.InnerText, Image = td?.Descendants("img")?.FirstOrDefault()? .ChildAttributes("src")?.FirstOrDefault()?.Value, Link = td?.Descendants("a")?.FirstOrDefault()? .ChildAttributes("href")?.FirstOrDefault()?.Value, }; homes.Add(home); } } } public class Home { public String Area { get; set; } public String Price { get; set; } public String Image { get; set; } public String Link { get; set; } } }
Что я уже пробовал:
SqlConnection con; string var; var name; var price; var image; var link; try { var = @"Data Source=.;Initial Catalog=WebCrawler;Integrated Security=True"; con = new SqlConnection(var); con.Open(); Console.WriteLine("DataBase Connected"); string query = "Insert into details(Name,Price,Image,Link) VALUES ('" + name + "'," + price + "," + image + "," + link + ")"; SqlCommand ins = new SqlCommand(query,con); ins.ExecuteNonQuery(); Console.WriteLine("\n Data Stored in Database"); string q = "Select * from CrawlerDetails"; SqlCommand view = new SqlCommand(q, con); SqlDataReader dr = view.ExecuteReader(); while (dr.Read()) { Console.WriteLine("Name:"+dr.GetValue(1).ToString()); Console.WriteLine("\nPrice:" + dr.GetValue(2).ToString()); Console.WriteLine("\nImage:" + dr.GetValue(3).ToString()); Console.WriteLine("\nLink:" + dr.GetValue(4).ToString()); } con.Close(); } catch (SqlException x) { Console.WriteLine(x.Message); }
Richard Deeming
Все, что вы хотели знать о SQL-инъекции (но боялись спросить) | Трой Хант[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? | Обмен Стеками Информационной Безопасности[^]
Шпаргалка по параметризации запросов / OWASP[^]
using (var con = new SqlConnection(@"Data Source=.;Initial Catalog=WebCrawler;Integrated Security=True")) { con.Open(); using (var ins = new SqlCommand("Insert into details(Name, Price, Image, Link) VALUES (@Name, @Price, @Image, @Link)", con)) { ins.Parameters.AddWithValue("@Name", name); ins.Parameters.AddWithValue("@Price", price); ins.Parameters.AddWithValue("@Image", image); ins.Parameters.AddWithValue("@Link", link); ins.ExecuteNonQuery(); } using (var view = new SqlCommand("Select Name, Price, Image, Link from CrawlerDetails", con)) using (var dr = view.ExecuteReader()) { while (dr.Read()) { Console.WriteLine("Name: {0}", dr["Name"]); Console.WriteLine("Price: {0}", dr["Price"]); Console.WriteLine("Image: {0}", dr["Image"]); Console.WriteLine("Link: {0}", dr["Link"]); } } }
Теперь вам просто нужно выяснить, какие значения вы хотели вставить, и действительно ли вы хотите вставить в одну таблицу и выбрать из другой таблицы!
Jagga Lyalpuria
является ли этот код написанным в основной функции?? Спасибо
Richard Deeming
Он заменяет код, который вы показали в своем вопросе.
Jagga Lyalpuria
Я сделал это, но ошибка приходит (имя, цена, изображение и ссылка не объявляются) в этой строке "ins.Параметр.AddWithValue();"
Richard Deeming
Это та же самая проблема, упомянутая в решении №1: Ваш код объявил переменные, но никогда не присваивал им значения.
Не зная, откуда берутся эти значения, мы не можем сказать вам, как исправить ваш код.
Jagga Lyalpuria
Я вставляю эти значения в одну таблицу