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

 

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

Data Type Mismatch

Îåêßíçóå áðü ôï ìÝëïò Τάσκος Γιώργος. Τελευταία δημοσίευση από το μέλος Τάσκος Γιώργος στις 12-10-2008, 18:24. Υπάρχουν 10 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  10-10-2008, 22:05 45359

    Data Type Mismatch

    Καλησπέρα,

    Έχω ένα πρόβλημα ότι μου γυρνάει ένα Data Type Mismatch exception όταν κάνω insert αυτή
    την εγγραφή. Καταλαβαίνω την φύση του προβλήματος αλλά δεν μπορώ να το εντοπίσω.
    Βλέπει κανείς κάτι λάθος?

    Όλα τα πεδία είναι (κείμενο), εκτός απο το ID (αυτόματη αρίθμηση) και το Comments (Υπόμνημα).

    public void AddClient(string[] textBoxes)
    {
    OleDbConnection myDbConnection = new OleDbConnection(o.ConnString);
    OleDbCommand myCommand = new OleDbCommand();

    try
    {

    myCommand.CommandText = "INSERT INTO Epafes (ID, Onoma, Epwnumo, Address, City, Area, PostCode," +
    "Company, AFM, DOY, WorkTel, InternalWork, MobileTel, Fax, Email, ContactID, Comments)" +
    " VALUES('"
    + textBoxes[0] + "','" + textBoxes[1] + "','" + textBoxes[2] + "','" + textBoxes[3] + "','"
    + textBoxes[4] + "','" + textBoxes[5] + "','" + textBoxesDevil + "','" + textBoxes[7] + "','"
    + textBoxesMusic + "','" + textBoxes[9] + "','" + textBoxes[10] + "','" + textBoxes[11] + "','"
    + textBoxes[12] + "','" + textBoxes[13] + "','" + textBoxes[14] + "','" + textBoxes[15] + "','"
    + textBoxes[16] + "'" + ");";

    myCommand.Connection = myDbConnection;
    myDbConnection.Open();
    myCommand.ExecuteNonQuery();
    }



    Που έρχεται απο την κύρια φόρμα ετσι....

    public string[] textBoxes = new string[17];

    DataSrcs d = new DataSrcs();

    textBoxes[0] = "";
    textBoxes[1] = NameTextBox.Text;
    textBoxes[2] = LastNameTextBox.Text;
    textBoxes[3] = AddressTextBox.Text;
    textBoxes[4] = CityTextBox.Text;
    textBoxes[5] = AreaTextBox.Text;
    textBoxesDevil = PkTextBox.Text;
    textBoxes[7] = CompanyTextBox.Text;
    textBoxesMusic = AfmTextBox.Text;
    textBoxes[9] = DoyTextBox.Text;
    textBoxes[10] = PhoneTextBox.Text;
    textBoxes[11] = IntTextBox.Text;
    textBoxes[12] = MobileTextBox.Text;
    textBoxes[13] = FaxTextBox.Text;
    textBoxes[14] = MailTextBox.Text;
    textBoxes[15] = ContactIdTextBox.Text;
    textBoxes[16] = CommentsRichTextBox.Text.ToUpper();

    d.AddClient(textBoxes);


    Πρόσθεσα μόνο τον κώδικα που αφορά το πρόβλημα....
  •  10-10-2008, 22:29 45360 σε απάντηση της 45359

    Απ: Data Type Mismatch

    Βασικά αν δεν κάνω λάθος βλέπω δύο λάθοι και όχι ένα. Απλά το δεύτερο θα εμφανιστεί όταν φτιάξεις σωστά το SQL String και το στείλεις στην βάση.

    Εφόσων το Id είναι αριθμός τότε δεν χρειάζεται '..' για να γραφτεί, απλά γράφεις τον αριθμό. Δηλαδή μετά το VALUES που έχεις ως : "VALUES ('" + textbox[0] + "','" να γίνει "VALUES (" + textbox[0] + ",'" Η δοαφορά είναι λεπτή αλλά αν προσέξεις θα δεις ότι λείπουν κάποια αυτάκια.

    Το δεύτερο λάθος αφού περάσει το validation του SQLString θα σου έρθει από την βάση γιατί τα Auto Increment πεδία πέρνουν από μόνα τους αρίθμηση. Οπότε ο SQL θα σου παραπονιέται ότι δεν πρέπει το SQL Statement σου να περιέχει το Id πεδίο. 

  •  11-10-2008, 01:26 45362 σε απάντηση της 45360

    Απ: Data Type Mismatch

    Ευχαριστώ πολύ...το ήξερα για το ID, δοκίμαζα διάφορα αλλά είχα λάθος και σε ένα πεδίο που είναι αριθμός.

    Η πλάκα ποια είναι τώρα ενώ δεν έχω αλλάξει κάτι δεν παίρνει το ConnectionString αν το έχω σε μεταβλητή
    στα settings της εφαρμογής.

    Format of the initialization string does not conform to specification starting at index 0. <-- το error.

    Καρφωτό ή σε μεταβλητή μέσα στην κλάση παίζει κανονικά...καλό ε!

  •  11-10-2008, 01:30 45363 σε απάντηση της 45362

    Απ: Data Type Mismatch

    Θυμήθηκες να βγάλεις και το ID από τη λίστα των πεδίων?
    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  11-10-2008, 01:50 45364 σε απάντηση της 45363

    Απ: Data Type Mismatch

    Ναι το έκανα, και θέλω να είμαι ειλικρινής, όχι με την πρώτη, έπιασα το exception κατευθείαν όμως.

  •  11-10-2008, 03:53 45366 σε απάντηση της 45362

    Απ: Data Type Mismatch

    Θα μπορούσες να γράψεις την γραμμή κώδικα που αναφέρεται στο ConnectionString όταν το έχεις στον config file?  Θέλω να δω γιατί σου χτυπάει exception.
  •  11-10-2008, 15:47 45371 σε απάντηση της 45366

    Απ: Data Type Mismatch

    Δεν έπαιζε έτσι,

    Application.Settings.basedbConnectionString = Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\basedb.mdb

    public class Options
    {
    private string _connString;

    public string ConnString
    {
    get { return _connString; }
    set { _connString =
    Properties.Settings.Default.basedbConnectionString; }
    }
    }

    public class Datasrcs
    {
    public void MethodOtiNaNai(params)
    {
    Options o = new Options();
    OleDbConnection myDbConnection = new OleDbConnection(o.ConnString);
    }
    }


    Έπαιζε μέχρι καποια στιγμή που άρχισε να το χαλάει. Εντάξει δεν είναι σημαντικό.
    Δεν χρησιμοποιώ property απλά. Το έκανα έτσι.

    public class DataSrcs
    {
    private string s = Properties.Settings.Default.basedbConnectionString;

    public void MethodOtiNaNai(params)
    {
    OleDbConnection myDbConnection = new OleDbConnection(s);
    }
    }


    Και παίζει χωρίς πρόβλημα.







  •  11-10-2008, 18:11 45376 σε απάντηση της 45371

    Απ: Data Type Mismatch

    Δεν νομίζω ότι φταίει το ότι χρησιμοποίησες property αλλά ότι ... δεν του έδωσες τιμή. Από τη στιγμή που δεν θέτεις κάποια τιμή στο ConnString μέσα σε κάποιο constructor, το new Options() θα αφήσει το πεδίο _connString κενό. Επίσης, η set που έβαλες δεν σου επιτρέπει καν να θέσεις κάποια τιμή στο _connString. Υποψιάζομαι ότι δεν έχεις καταλάβει τί κάνει η set και γενικότερα τα properties.

    Η set μέθοδος ενός property MyProperty καλείται όταν γράφεις κάπου Myproperty = somevalue. Δεν καλείται ποτέ από μόνη της, ούτε καλείται όταν δημιουργείς ένα αντικείμενο.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  11-10-2008, 21:50 45380 σε απάντηση της 45376

    Απ: Data Type Mismatch

    ΟΚ κατάλαβα, η Property δεν μπορεί να έχει default τιμή, πρέπει να του δώσεις...
    και μετά να την χρησιμοποιήσεις, μάλλον του έδινα τιμή και μετά το έβγαλα,
    γιατί το θεώρησα ποιο σωστό. Υπέθεσα ότι στην set μπορώ αντί για value,
    να του δώσω μια Default τιμή αλλά δεν παίζει φαση. Ευχαριστώ Παναγιώτη..

  •  12-10-2008, 17:20 45399 σε απάντηση της 45380

    Απ: Data Type Mismatch

    Default τιμή μπορείς να δώσεις με δύο τρόπους:

    1. Φτιάχνοντας ένα constructor και βάζοντας εκεί μέσα την τιμή που θέλεις
    2. Αλλάζοντας τον ορισμό του _connstring σε private string _connString = Properties.Settings.Default.basedbConnectionString;

    Νομίζω ότι πρώτα θα πρέπει να κοιτάξεις τις βασικές έννοιες, όπως τί είναι και πως δουλεύουν οι κλάσεις, τα properties και οι constructors και μετά να προσπαθήσεις να μιλήσεις με τη βάση ή από μία κλάση σε άλλη. Διαφορετικά σε περιμένει πολύ τρέξιμο.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  12-10-2008, 18:24 45404 σε απάντηση της 45399

    Απ: Data Type Mismatch

    Ασχολήθηκα με τις έννοιες που λές, απλά προσπαθώ να τα δώ και εν ενεργεία....
    η αλήθεια είναι ότι τώρα άρχισα να διαβάζω περί winforms, αλλά ήθελα να αρχίσω κάτι
    ταυτόχρονα...νομίζω ότι έτσι θα καταλαβαίνω τα λάθη μου και θα κατανοώ τις τεχνικές,
    και θα βλέπω και τι μου έχει διαφύγει από θεωρία, κι έτσι το ξαναφρεσκάρω.
    Πιστεύω ότι διαβάζοντας κάτι μια φορά, και φτιάχνοντας κάποια παραδείγματα που σου δίνουν,
    σίγουρα καταλαβαίνεις εκείνη την ώρα,αν δεν το χρησιμόποιήσεις να καταλάβεις ακρίβως τι συμβαίνει
    (μετά από λίγο καιρό σε κώδικα σου), δεν το εμπεδώνεις. Αν δεν κολήσεις δεν θα μάθεις, έτσι δεν είναι?

    Πάντως ουκ ολίγες φορές με έχεις βοηθήσει, που σίγουρα στους ποιο πολλούς εδώ ακούγονται βαρετά και βλακείες.
    Ευχαριστώ!

Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems