Linq To SQL - podgląd zapytania

Linq To SQL - podgląd zapytania
SH
  • Rejestracja:ponad 14 lat
  • Ostatnio:około 12 lat
  • Postów:44
0

Witam,

używam Linq To SQL do połączenia ze zdalną bazą. Piszę program do obsługi bazy Prestashop.
Ogólnie wszystko jest w porządku, ale mam problem z zapytaniami w kierunku jednej z tabel bazy danych (na wszystkich innych zapytania wykonują się dobrze).
Dostaję typowy alert:
Something is wrong in your syntax obok 'condition, customizable, date_add, date_upd, depth, ean13, ecotax, height, id_ca' w linii 1

Podejrzewam, że pytanie źle się generuje, ale szczerze mówiąc nie mam pojęcia jak podejrzeć kompletne zapytanie przed jego wysłaniem do bazy - i tutaj moja prośba o pomoc, czy da się w ogóle to zapytanie podejrzeć?

Czy zapytania w Linq to SQL są ograniczone długością? Jest to druga kwestia, która podejrzewam, ponieważ tabela zawiera 46 kolumn co przy zapytaniu typu insert może wygenerować dosyć długie zapytanie.

Dodam, że przez PHPmyAdmin nie ma najmniejszego problemu z zapytaniami.
Ważne też jest to, że używam Linq to SQL na bazie MySQL dzięki DBlinq - automatycznie generowane klasy dla bazy MySQL. Metoda pozwala na operacje na bazach MySQL jakby były bazami SQL.

Dlatego podejrzewam, że w którymś miejscu zapytania jest jakiś głupi błąd, ale nie potrafię wyświetlić zapytania żeby to sprawdzić

edytowany 1x, ostatnio: shao
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 4 godziny
0

jakbyś chociaż pokazał jakiś fragment kodu...

SH
  • Rejestracja:ponad 14 lat
  • Ostatnio:około 12 lat
  • Postów:44
0
Azarien napisał(a)

jakbyś chociaż pokazał jakiś fragment kodu...

Nie wklejałem wcześniej, ponieważ uważam, że niewiele to pomoże jeśli ktoś nie zna struktury bazy:

Kopiuj
 private void button1_Click(object sender, EventArgs e)
        {
            HalPOrPRestA conn = new HalPOrPRestA(new MySqlConnection("Database=***;Data Source=***;User Id=***;Password=***"));            
            
            conn.PsProduct.InsertOnSubmit(new PsProduct { Condition=PsProduct.ConditionType.used, IDSupplier = 10, IDTaxRulesGroup = 1, DateAdd = DateTime.Now, DateUpd = DateTime.Now });            

            conn.SubmitChanges(); 

HalPOrPRestA to klasa automatycznie wygenerowana przez DbLinq. Opisana wyżej metoda działa bez problemu na wszystkich tabelach za wyjątkiem Ps_product.
Załączam jeszcze strukturę tabeli PS_product:

Kopiuj
 DROP TABLE IF EXISTS `ps_product`;
CREATE TABLE `ps_product` (
  `id_product` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `id_supplier` int(10) unsigned DEFAULT NULL,
  `id_manufacturer` int(10) unsigned DEFAULT NULL,
  `id_tax_rules_group` int(10) unsigned NOT NULL,
  `id_category_default` int(10) unsigned DEFAULT NULL,
  `id_color_default` int(10) unsigned DEFAULT NULL,
  `on_sale` tinyint(1) unsigned NOT NULL DEFAULT '0',
  `online_only` tinyint(1) unsigned NOT NULL DEFAULT '0',
  `ean13` varchar(13) DEFAULT NULL,
  `upc` varchar(12) DEFAULT NULL,
  `ecotax` decimal(17,6) NOT NULL DEFAULT '0.000000',
  `quantity` int(10) NOT NULL DEFAULT '0',
  `minimal_quantity` int(10) unsigned NOT NULL DEFAULT '1',
  `price` decimal(20,6) NOT NULL DEFAULT '0.000000',
  `wholesale_price` decimal(20,6) NOT NULL DEFAULT '0.000000',
  `unity` varchar(255) DEFAULT NULL,
  `unit_price_ratio` decimal(20,6) NOT NULL DEFAULT '0.000000',
  `additional_shipping_cost` decimal(20,2) NOT NULL DEFAULT '0.00',
  `reference` varchar(32) DEFAULT NULL,
  `supplier_reference` varchar(32) DEFAULT NULL,
  `location` varchar(64) DEFAULT NULL,
  `width` float NOT NULL DEFAULT '0',
  `height` float NOT NULL DEFAULT '0',
  `depth` float NOT NULL DEFAULT '0',
  `weight` float NOT NULL DEFAULT '0',
  `out_of_stock` int(10) unsigned NOT NULL DEFAULT '2',
  `quantity_discount` tinyint(1) DEFAULT '0',
  `customizable` tinyint(2) NOT NULL DEFAULT '0',
  `uploadable_files` tinyint(4) NOT NULL DEFAULT '0',
  `text_fields` tinyint(4) NOT NULL DEFAULT '0',
  `active` tinyint(1) unsigned NOT NULL DEFAULT '0',
  `available_for_order` tinyint(1) NOT NULL DEFAULT '1',
  `condition` enum('new','used','refurbished') NOT NULL DEFAULT 'new',
  `show_price` tinyint(1) NOT NULL DEFAULT '1',
  `indexed` tinyint(1) NOT NULL DEFAULT '0',
  `cache_is_pack` tinyint(1) NOT NULL DEFAULT '0',
  `cache_has_attachments` tinyint(1) NOT NULL DEFAULT '0',
  `cache_default_attribute` int(10) unsigned DEFAULT NULL,
  `date_add` datetime NOT NULL,
  `date_upd` datetime NOT NULL,
  PRIMARY KEY (`id_product`),
  KEY `product_supplier` (`id_supplier`),
  KEY `product_manufacturer` (`id_manufacturer`),
  KEY `id_category_default` (`id_category_default`),
  KEY `id_color_default` (`id_color_default`),
  KEY `date_add` (`date_add`)
) ENGINE=MyISAM AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;

#
# Dumping data for table ps_product
#

LOCK TABLES `ps_product` WRITE;
/*!40000 ALTER TABLE `ps_product` DISABLE KEYS */;
INSERT INTO `ps_product` VALUES (7,0,0,1,1,0,0,0,'',NULL,0,180,1,241.638796,200,NULL,0,0,'',NULL,NULL,0,0,0,0,2,0,0,0,0,1,1,'new',1,1,0,0,NULL,'2011-10-21 14:49:25','2011-10-21 14:49:25');
INSERT INTO `ps_product` VALUES (9,2,2,1,1,0,0,1,'',NULL,0,1,1,124.58194,0,NULL,0,0,'',NULL,NULL,0,0,0,0,2,0,0,0,0,1,1,'new',1,1,0,0,NULL,'2011-10-21 14:49:25','2011-10-21 14:49:25');
/*!40000 ALTER TABLE `ps_product` ENABLE KEYS */;
UNLOCK TABLES;
SH
  • Rejestracja:ponad 14 lat
  • Ostatnio:około 12 lat
  • Postów:44
0

Oczywiście, nie chodzi mi o to, żeby ktoś rozwiązywał za mnie problem - ale liczę na podpowiedzi gdzie mogę szukać rozwiązania.

SH
  • Rejestracja:ponad 14 lat
  • Ostatnio:około 12 lat
  • Postów:44
0

podbijam jeszcze raz, docenię KAŻDY pomysł

SH
  • Rejestracja:ponad 14 lat
  • Ostatnio:około 12 lat
  • Postów:44
0

Problem rozwiązany:

jedno z pól w bazie nazwane jest 'condition' - a jest to jednocześnie słowo kluczowe języka MySQL, dlatego był problem z dodaniem produktu.
Nie wiem jeszcze jak w kodzie Presty jest to rozwiązane, ale podejrzewam, że jest to pewnego rodzaju zabezpieczenie przed zdalną administracją Presty.

Do zamknięcia, aczkolwiek problem jest ciekawy.
Pozdrawiam

Sarrus
  • Rejestracja:prawie 14 lat
  • Ostatnio:dzień
  • Postów:2512
0

Czy połączenie jest szyfrowane? Jeżeli nie, może najprostszym sposobem na podejrzenie zapytania będzie użycie sniffera, np. Wiresharka

ŁF
prościej będzie podejrzeć zawartość obiektu linq, np. var r = dc.tabela.where() i myszą sprawdzić zawartość r - wyświetli się m.in. treść zapytania. gorzej, jeśli wyciągany jest jeden rekord (Single*/First*) lub żaden (Any/Count).
SH
  • Rejestracja:ponad 14 lat
  • Ostatnio:około 12 lat
  • Postów:44
0

Sarrus, bardzo dobry pomysł :) skorzystałbym z niego, ale już na szczęście nie muszę - tak jak napisałem post wyżej, udało się rozwiązać problem

Sarrus
Jak zaczynałem pisać swojego posta, to jeszcze nie było Twojego. Tak gwoli wyjaśnienia ;).
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)