Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

MS SQL 2000 & Ελληνικά

Îåêßíçóå áðü ôï ìÝëïò dimoss. Τελευταία δημοσίευση από το μέλος dimoss στις 16-06-2006, 20:32. Υπάρχουν 38 απαντήσεις.
Σελίδα 1 από 3 (39 εγγραφές)   1 2 3 >
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  04-06-2006, 15:23 13590

    MS SQL 2000 & Ελληνικά

    Γεια σας,

    Έχω ένα παράξενο πρόβλημα με μια εφαρμογή που έχω φτιάξει για αναζήτηση βάσει κριτηρίων (δημιουργία ενός @WhereString το οποίο περνάει με Session και "τραβάει" τα δεδομένα από μια βάση MS-SQL).
    Ενώ όλα λειτουργούν κανονικά σε τοπικό επίπεδο (εννοώ στον τοπικό SQL SERVER), αφού κάνω import το table και την store procedure στον SQL του provider η εφαρμογή δεν δουλεύει βγάζοντας "Incorrect syntax" error.

    - Το collation είναι το ίδιο και στις δύο βάσεις: Greek_CI_AS
    - Οι κολώνες με κείμενο είναι τύπου: nvarchar

    Παρακάτω σας δίνω τον κώδικα των:

    1. Store Procedure:

    CREATE Procedure sp_search
    @WhereString nvarchar(500)

    AS

    Declare @SQL nvarchar(2500)

    SELECT @SQL = ' SELECT * ' +
    ' FROM te ' +
    ' WHERE nomarxia is not null ' + @WhereString +
    ' ORDER BY pinakas ASC, entopiotita, m_total DESC, m_vathmos_ptixio DESC, m_2o_ptixio DESC, m_programa_oaed DESC, m_sinafes_phd DESC, m_all_phd DESC,
                          m_sinafes_master DESC, m_allo_master DESC, empeiria_total DESC, empeiria_50 DESC, m_glosses DESC, etos_ptixio ASC '

    Exec (@SQL)
    GO

    2. Φόρμα

    <%@LANGUAGE="VBSCRIPT" CODEPAGE="1253"%>
    <%Session.CodePage= 1253%>
    <!--#include file="asep.asp" -->
    <%
    Session("WhereString") = ""
    %>
    <% Dim WhereString

    If Request.Form("nomarxia") <> "0" THEN WhereString = WhereString & " AND te.nomarxia = '" & Request.Form("nomarxia") & "'" END IF

    If Request.Form("klados") <> "0" THEN WhereString = WhereString & " AND te.klados = '" & Request.Form("klados") & "'" END IF

    IF Request.Form("politeknos") = "1" THEN WhereString = WhereString & "AND te.politeknos = 'Ν'" END IF

    IF Request.Form("palino") = "1" THEN WhereString = WhereString & "AND te.palino = 'Ν'" END IF

    IF Request.Form("empeiria1") = "1" THEN WhereString = WhereString & "AND te.empeiria_total >= 1" END IF

    IF Request.Form("empeiria0") = "1" THEN WhereString = WhereString & "AND te.empeiria_total = 0" END IF

    WhereString = WhereString
    Session("WhereString") = WhereString
    If Request.Form("submit") <> "" THEN Response.redirect "list.asp"
    %>

    ....και ακολουθεί μια normal φόρμα ή οποία κάνει action στην ίδια σελίδα

    -----------------------------------------------------------------------------------------------
    Τα παραπάνω δουλεύουν ρολόϊ τοπικά ενώ βγάζουν μήνυμα λάθους στο online

    Microsoft OLE DB Provider for SQL Server error '80040e14'

    Line 1: Incorrect syntax near 'Øì'.

    /asep/te/list.asp, line 21

    Από το μήνυμα καταλαβαίνω ότι κάτι τρέχει με τα ελληνικά, αλλά δεν μπορώ να καταλάβω τι...

    Μήπως κάποιος μπορεί να βοηθήσει?

    Το url είναι...www.tabletennis.gr/asep/te/

    Ευχαριστώ προκαταβολικά.

    Υ.Γ. Να σημειώσω επίσης ότι δοκίμασα να βάλω και το περιβόητο N
    για παράδειγμα
    If Request.Form("nomarxia") <> "0" THEN WhereString = WhereString & " AND te.nomarxia = Ν'" & Request.Form("nomarxia") & "'" END IF

    ...αλλά τίποτε..Sad <img src=">
  •  04-06-2006, 15:53 13591 σε απάντηση της 13590

    Απ: MS SQL 2000 & Ελληνικά

    Όταν έγραφα παλιά ASP 2.0 - 3.0 χρησιμοποιούσα στα directives της σελίδας το παρακάτω:

    CodePage=65001

    I hope it helps


    Βαγγέλης Ξανθάκης
    Independent Consultant
    www.aylos.com
  •  04-06-2006, 15:55 13592 σε απάντηση της 13591

    Απ: MS SQL 2000 & Ελληνικά

    Να προσθέσω ότι δεν είμαι σίγουρος ότι θα δουλέψει γιατί έγραφα πάντα για UTF-8 και προφανώς το αντίστοιχο collation στη βάση


    Βαγγέλης Ξανθάκης
    Independent Consultant
    www.aylos.com
  •  04-06-2006, 15:56 13593 σε απάντηση της 13590

    Sad [:(] Απ: MS SQL 2000 & Ελληνικά

    Εννοείς να αλλάξω από 1253 σε 65001?

    Τζίφος και αυτό...
  •  04-06-2006, 17:17 13594 σε απάντηση της 13590

    Απ: MS SQL 2000 & Ελληνικά

    Χρησιμοποίσε αν μπορείς τον SQL profiler να δεις το τελικό query που τρέχει στην βάση. Επίσης όπου χρησιμοποιείς nvarchar έλεγξε αν χρησιμοποείς το N' μπροστά από κάθε αναζήτηση

    From SQL Books Online

    Unicode constants are specified with a leading N: N'A Unicode string'.


    Βαγγέλης Ξανθάκης
    Independent Consultant
    www.aylos.com
  •  04-06-2006, 17:25 13595 σε απάντηση της 13590

    Απ: MS SQL 2000 & Ελληνικά

    Έχω κάνει και τα δύο που λες..

    Στο SQL Profiler δεν με αφήνει να δω το Query που τρέχει στη online βάση γιατί δεν έχω τα κατάλληλα δικαιώματα στο server του host. Τοπικά που έχω τα κατάλληλα δικαιώματα το δοκίμασα και είδα ότι το query που περνάει είναι σωστό. Άλλωστε αυτό φαίνεται και από το γεγονός ότι η εφαρμογή τρέχει μια χαρά τοπικά.

    Επίσης έχω δοκιμάσει το Ν μπροστά από τα nvarchar χωρίς επιτυχία.

    Το περίεργο είναι ότι αν τρέξει κατευθείαν η list.asp παίρνω κανονικά όλα τα records του πίνακα σε σωστά ελληνικά. Άρα κάτι τρέχει στο πέρασμα του @WhereString και στην δημιουργία του δυναμικού query. Τσέκαρε εδώ www.tabletennis.gr/asep/te/list.asp
  •  04-06-2006, 17:39 13596 σε απάντηση της 13595

    Απ: MS SQL 2000 & Ελληνικά

    Θα επιμείνω λίγο στο 65001 γιατί νομίζω οτί εκεί είναι η λύση ... αλλά εκτός από αυτό θα πρέπει να ελέγξεις και αν τ αρχεία σου (ASP) αποθηκεύονται με τον ίδιο τρόπο.

    Αν έχεις 1253 σαν codepage τότε και τ αρχεία πρέπει να αποθηκεύονται με 1253.

    Αυτό εξαρτάται από τον editor που χρησιμοποιείς. Δυστυχώς δε θυμάμαι το παλιό VS 6 και δε το έχω εγκατεστημένο, αλλά νομίζω ότι αν κάνεις Save as βλέπεις το encoding που γίνεται η αποθήκευση

    Ελπίζω να δουλέψει


    Βαγγέλης Ξανθάκης
    Independent Consultant
    www.aylos.com
  •  04-06-2006, 17:45 13597 σε απάντηση της 13590

    Απ: MS SQL 2000 & Ελληνικά

    Δοκίμασα το 65001 και έλεγξα επίσης και τα asp να δείχνουν σε charset=utf-8.

    Τα ανέβασα και προσπάθησα να το τρέξω, αλλά πάλι τα ίδια. Επίσης όταν δοκίμασα να τρέξω κατευθείαν το list.asp....μου έβγαλε ?????? στην θέση των data. Από τηνάλλη μεριά το utf-8 παίζει καλά όταν τρέχει τοπικά

    Με το 1253 τo list.asp τρέχει κανονικά και παίρνω σωστά ελληνικά τόσο online όσο και τοπικά. Σου θυμίζω ότι το collation της βάσης είναι Greek_CI_AS.

    Επίσης έχω βάλει το Ν μπροστά από τα nvarchar.
  •  04-06-2006, 20:47 13599 σε απάντηση της 13590

    Απ: MS SQL 2000 & Ελληνικά

    Να σε ρωτήσω την έχεις online την εφαρμογή ... μπορείς να δώσεις URL

    ?
    Βαγγέλης Ξανθάκης
    Independent Consultant
    www.aylos.com
  •  04-06-2006, 21:38 13601 σε απάντηση της 13590

    Απ: MS SQL 2000 & Ελληνικά

    www.tabletennis.gr/asep/te/
  •  04-06-2006, 21:50 13602 σε απάντηση της 13590

    Απ: MS SQL 2000 & Ελληνικά

    Έχεις δημιουργήσει κάποιο datasource στο server για να δεις την βάση ?

    Και αν ναι έχεις πειράξει κάτι σχετικό με translation characters mpla mpla ?


    Βαγγέλης Ξανθάκης
    Independent Consultant
    www.aylos.com
  •  04-06-2006, 22:25 13603 σε απάντηση της 13590

    Απ: MS SQL 2000 & Ελληνικά

    Κοίτα..επειδή δεν είμαι και πολύ ειδικός με τον SQL...για εξήγησέ μου τ ακριβώς εννοείς?

    Η online βάση δημιουργήθηκε μέσα από το panel του host από εμένα...και μετά αυτοί αλλάξανε το collation se Greek_CI_AS...Μετά εγώ έκανα import ta data.

    Η εφαρμογή δουλεύει τζάμι locally...εντούτοις online μου βγάζει syntax error...

    Και ρωτάω εδώ...Πως εέιναι δυνατόν ναβγάζει systax error online και να μην μου βγάζει στο local?
  •  04-06-2006, 22:51 13605 σε απάντηση της 13590

    Απ: MS SQL 2000 & Ελληνικά

    Όπως είπες παραπάνω υπάρχει κάποιο θέμα με τα ελληνικά ...

    Για να δουλέψει η εφαρμογή σου χρειάζεται ένα connection string για να συνδεθεί με τη βάση. Αυτό μπορεί να είναι της μορφής

    Provider=MSDASQL.1;Password=k;Persist Security Info=True;User ID=;Data Source=

    Το datasource το έχεις δημιουργήσει πιθανώς με το ODBC Datasource administrator και μία από τις παραμέτρους που δέχεται είναι η Perform Translation for character data. Προσπάθησε να δεις τις παραμέτρους αυτές.

    Πάντως από τι είδα στο HTTP όλες οι παράμετροι σου περνάνε κανονικά. Αυτά για απόψε. Καλή τύχη.


    Βαγγέλης Ξανθάκης
    Independent Consultant
    www.aylos.com
  •  04-06-2006, 22:56 13606 σε απάντηση της 13590

    Απ: MS SQL 2000 & Ελληνικά

    Το ότι συνδέομαι με την βάση δεν χωράει αμφιβολία από την στιγμη που από το

    www.tabletennis.gr/asep/te/list.asp

    παίρνω όλα τα records κανονικά.

    Αν δεν συνδεόμουν με την βάση με το connection string που έχω φτιάξει, δεν θα μπορύσα να πάρω τα records..σωστά?

    Οι παράμετροι περνάνε κανονικά...αλλά από το submit της φόρμας και μετά κάπου κολλάει...ΚΑΙ ΔΕΝ ΜΠΟΡΩ ΝΑ ΒΡΩ ΠΟΥ!!!
  •  05-06-2006, 08:06 13609 σε απάντηση της 13590

    Απ: MS SQL 2000 & Ελληνικά

    Αν οι δύο SQL Servers έχουν το ίδιο collation και χρησιμοποιείς unicode strings, το πρόβλημα θα βρίσκεται είτε στην κωδικοποίηση της σελίδας είτε στο locale του server.

    Καταρχήν, θα πρέπει να βάλεις το N μπροστά από κάθε string που χρησιμοποιείς, ακόμα και όταν τα προσθέτεις:



    SELECT @SQL = N' SELECT * ' +
    N' FROM te ' +
    N' WHERE nomarxia is not null ' + @WhereString +
    N' ORDER BY pinakas ASC, entopiotita, m_total DESC, m_vathmos_ptixio DESC, m_2o_ptixio DESC, m_programa_oaed DESC, m_sinafes_phd DESC, m_all_phd DESC,
                          m_sinafes_master DESC, m_allo_master DESC, empeiria_total DESC, empeiria_50 DESC, m_glosses DESC, etos_ptixio ASC '

    Πρέπει να το βάλεις όμως ΚΑΙ στα string που περνάς από τη σελίδα:



    If Request.Form("nomarxia") <> "0" THEN WhereString = WhereString & " AND te.nomarxia = N'" & Request.Form("nomarxia") & "'" END IF

    Επίσης, θα πρέπει η σελίδα σου να είναι σε Unicode, γιατί δεν αρκεί απλά να πεις ότι τα strings είναι Unicode, πρέπει και το περιεχόμενο τους να είναι Unicode.

    Τέλος, μπορείς πριν εκτελέσεις το sql string να το αποθηκεύσεις σε ένα δικό σου πίνακα για να μπορέσεις μετά να δεις τί φταίει.

    Ο τρόπος με τον οποίο χρησιμοποιείς stored procedure πάντως δεν σου προσφέρει τίποτε. Από τη στιγμή που δημιουργείς το sql string και το εκτελείς, πρέπει να έχεις πλήρη δικαιώματα στους πίνακες που αγγίζεις, ενώ χάνεται και κάθε δυνατότητα caching του sql statement. Άσε που θα πρέπει να προσέχεις πολύ μετά στον τρόπο χειρισμού των strings για να αποφύγεις προβλήματα σαν αυτό. Και το χειρότερο, οποιοσδήποτε μπορεί να "σπάσει" την εφαρμογή σου βάζοντας ένα ' στα κριτήρια. Είναι κλασσική περίπτωση sql injection.
    Αν θέλεις οπωσδήποτε να προσθέτεις τα κριτήρια δυναμικά σε ένα query, καλύτερα να το κάνεις αυτό στην ASP σελίδα, για να ξέρεις και ποιό statement εκτελείται τελικά.
    Το καλύτερο πάντως θα ήταν να δημιουργήσεις διαφορετικά stored procedures για κάθε συνδυασμό παραμέτρων. Έτσι κι αλλιώς εδώ φαίνεται ότι έχεις λίγους συνδυασμούς να καλέσεις.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
Σελίδα 1 από 3 (39 εγγραφές)   1 2 3 >
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems