Announcement

Collapse
No announcement yet.

Formatprobleme beim Aufruf einer Proc mit Parametern

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Formatprobleme beim Aufruf einer Proc mit Parametern

    Hallo,

    ich rufe aus VS 2010 heraus eine Prozedur auf dem SQL Server auf und übergebe dabei eine Menge Parameter. Die Formate der Werte entsprechen exakt der Zahlenformate wie sie in den SQL Server Tabellen angelegt sind.

    Es gibt dabei aber immer wieder Probleme mit Meldungen wie:

    Parameterwert konnte nicht von String in Int32 umgewandelt werden.
    Meine Übergabe erfolgt folgendermaßen:

    Code:
    Int
    dp.SelectCommand.Parameters.Add("@abmessung_fzb", SqlDbType.Int).Value =abmessung_fzbTextBox.Text
    
    'decimal (8,2)
    dp.SelectCommand.Parameters.Add("@aufwand_fzb", SqlDbType.Decimal).Value = Aufwand_fzbTextBox.Text
    
    'varchar
    dp.SelectCommand.Parameters.Add("@bemerkung_eingussteile", SqlDbType.VarChar, 2000).Value = Bemerkung_eingussteileTextBox.Text
    
    'datetime
    dp.SelectCommand.Parameters.Add("@entsorgungsdatum_sinterteil", SqlDbType.DateTime).Value = Entsorgungsdatum_sinterteilDateTimePicker.Text
    
    'bit
    dp.SelectCommand.Parameters.Add("@direktguss", SqlDbType.Bit).Value = DirektgussCheckBox.Checked
    Ist hier vielleicht noch was falsch? In der Regel entnehme ich die Werte aus TextBoxen in einem VS 2010 Formular.

    Danke Euch!

    Mark B

  • #2
    Hallo Mark,

    einen Wert=Text an eine Variable=Integer zu übergeben funktioniert nicht (immer).

    Demnach ist der Code wie folgt zu ändern:
    Beispiel:
    VON: dp.SelectCommand.Parameters.Add("@abmessung_fzb", SqlDbType.Int).Value =abmessung_fzbTextBox.Text
    NACH: dp.SelectCommand.Parameters.Add("@abmessung_fzb", SqlDbType.Int).Value = CInt(abmessung_fzbTextBox.Text)

    Für die anderen Programmzeilen entsprechend.

    -Hans

    Comment


    • #3
      Danke Hans - funktioniert aber nicht. Ich erhalte:

      Ungültige Konvertierung von der Zeichenfolge in Typ Integer.
      nachdem ich dein empfolenes:

      Code:
       dp.SelectCommand.Parameters.Add("@abmessung_fzb", SqlDbType.Int).Value = CInt(Abmessung_fzbTextBox.Text)
      eingegeben habe.

      Mark B

      Comment


      • #4
        Hast du mal geprüft, ob dein Text auch wirklich nur Zeichen enthält, die in einen Int umgewandelt werden können. Also Leerzeichen, Zeilenumbrüche usw. ggf. entfernen
        Christian

        Comment


        • #5
          Du solltest eine Usereingabe auf jedenfall explizit konvertieren (und am besten vorher Leerzeichen weg trimmen). Sich einfach auf den User verlassen das er das schon richtig eingibt kannst du vergessen. Jeder Datentyp hat eigentlich eine Parse bzw. noch besser eine TryParse Methode die du anwenden solltest.

          Den DatetimePicker als Text auszulesen(der eh schon einen Datetime hält) um dann wieder ein DateTime daraus zu machen erscheint mir auch eher ungeschickt.

          Comment


          • #6
            es sind speziell für die Beispielspalte viele NULL Werte enthalten. Ansonsten ist die Spalte im SQL Server als Int Spalte definiert. Da gibt es also auch keine Leerzeichen.
            ich habe die NULL werte mal mit 0 ersetzt. Das gleiche Problem !

            Inwiefern sich in den textfeldern des Formulares Leerzeichen verstecken weiß ich nicht.

            Erklärt mir bitte wie ich die TryParse Methode handeln kann.

            Mark B

            Comment


            • #7
              Wie das geht steht in der Hilfe.

              Comment


              • #8
                meine Lösung:

                Code:
                 'Int
                dp.SelectCommand.Parameters.Add("@abmessung_fzb", SqlDbType.Int).Value = CInt(Abmessung_fzbTextBox.Text)
                
                'decimal (8,2)
                dp.SelectCommand.Parameters.Add("@aufwand_fzb", SqlDbType.Decimal).Value = CDec(Aufwand_fzbTextBox.Text)
                
                
                'varchar 
                dp.SelectCommand.Parameters.Add("@bemerkung_eingussteile", SqlDbType.VarChar, 2000).Value = CStr(Bemerkung_eingussteileTextBox.Text)
                
                
                 'datetime
                dp.SelectCommand.Parameters.Add("@entsorgungsdatum_sinterteil", SqlDbType.DateTime).Value = CDate(Entsorgungsdatum_sinterteilDateTimePicker.Text)
                
                
                'bit
                dp.SelectCommand.Parameters.Add("@direktguss", SqlDbType.Bit).Value = DirektgussCheckBox.Checked
                funktioniert jetzt alles wunschgemäß.

                Danke an Euch!

                Mark B

                Comment


                • #9
                  funktioniert jetzt alles wunschgemäß.
                  Du (oder deine User) sind scheinbar extrem leicht zufrieden zu stellen

                  Diese Form der Konvertierung passiert innerhalb der Parameter Klasse auch ähnlich. Ob es nun knallt wenn es in der Parameter Klasse zu einem Konvertierungproblem kommt oder bei deinem CInt (oder anderem Cast) ist doch egal. Die Fehlermeldung wird nur ein etwas andere sein wie du in diesem Thread ja auch schon festgestellt hast. Wenn du einen beliebigen Text(da Usereingabe) in einen anderes Typ ändern willst ist casten keine Lösung du solltest richtig parsen.

                  Comment

                  Working...
                  X