2016-05-10 4 views
0

'Code für Einfügen Abfrage zum Einfügen von Daten.'zum Einfügen nur Datum im TT/MM/JJJJ-Format von textbox.error beim Einfügen von Daten in VB.net

Try 
     Dim Query As String 
     Query = "Insert * into test" 
     Dim cmd As SqlCommand 
     Query = "Insert into test(name,date,d1,d2,d3)values(@name,Getdate(),Convert(varchar,@d1,103),Convert(varchar,@d2,103),Convert(varchar,@d3,103))" 
    'Convert Function used to insert date in dd/MM/yyyy format' 
     cmd = New SqlCommand(Query, con) 
     con.Open() 
     cmd.Parameters.Add("@name", SqlDbType.VarChar).Value = TextBox1.Text 
     cmd.Parameters.Add("@d1", SqlDbType.DateTime).Value = TextBox2.Text 
     cmd.Parameters.Add("@d2", SqlDbType.DateTime).Value = TextBox3.Text 
     cmd.Parameters.Add("@d3", SqlDbType.DateTime).Value = TextBox4.Text 

     cmd.ExecuteNonQuery() 
     con.Close() 
     lblvalid.Visible = True 
     lblvalid.Text = "Record is inserted successfully" 

    Catch ex As Exception 
     lblvalid.Text = (ex.Message) 

    End Try 

in Datenbank

+0

irgendwann der Code funktioniert und Daten stored.But manchmal gibt es error.This die error-- ist Die Konvertierung eines char-Datentyps in einen datetime-Datentyp führte zu einem out-of-range-datetime-Wert. Die Aussage wurde beendet. Sagen Sie mir bitte, wo ich falsch liege. Bitte helfen Sie mir mit dem Code. – mrinal

+0

Sind Sie sicher, dass das Datum immer gültig ist? Kannst du deine tatsächlichen Datumswerte setzen, die den Fehler werfen? –

+0

Ich füge Daten im TT/MM/JJJJ-Format ein.eg.29/12/2016. Es zeigt Fehler wie oben.wie konvertiere ich Datetime in TT/MM/JJJJ Form beim Einfügen von Daten in Textbox. – mrinal

Antwort

0

Wenn Sie ein Datum in den ms-sql-Server einfügen, wenden Sie ein beliebiges der beiden Konzepte an.

Die grundlegende Lösung besteht darin, dass Sie das Datum entweder im Format mm/TT/JJJJ oder im Datumsformat JJJJ-MM-TT in die Abfrage ms-sql eingeben müssen.

Bevor Sie also das Datum zur Abfrage übergeben, konvertieren Sie das Datum entweder in das Format MM/TT/JJJJ oder in das Format JJJJ-MM-TT.

Um das Datum vom benutzerdefinierten Format in m/D/yyyy zu konvertieren, können Sie folgende Funktion verwenden.

Imports System.Globalization 

Public Function GetMDYFrmCustDt(ByVal CustDate As String) As String 
    Dim tmp As Date = DateTime.ParseExact(CustDate, "dd/MM/yyyy", DateTimeFormatInfo.CurrentInfo) 
    GetMDYFrmCustDt = GetMDYFrmSysDt(tmp) 
End Function 

Public Function GetMDYFrmSysDt(ByVal SysDate As Date) As String 
    Try 
     GetMDYFrmSysDt = SysDate.ToString("MM/dd/yyyy") 
    Catch ex As Exception 
     GetMDYFrmSysDt = SysDate.ToString("MM-dd-yyyy") 
    End Try 
End Function 

So müssen Sie

folgenden Code verwenden
Try 
    Dim cmd As SqlCommand 
    Dim Query As String = "Insert into test(name,date,d1,d2,d3)values(@name,Getdate(),@d1,@d2,@d3)" 
'Convert Function used to insert date in dd/MM/yyyy format' 
    cmd = New SqlCommand(Query, con) 
    con.Open() 
    cmd.Parameters.Add("@name", SqlDbType.VarChar).Value = TextBox1.Text 
    cmd.Parameters.Add("@d1", SqlDbType.DateTime).Value = GetMDYFrmCustDt(TextBox2.Text) 
    cmd.Parameters.Add("@d2", SqlDbType.DateTime).Value = GetMDYFrmCustDt(TextBox3.Text) 
    cmd.Parameters.Add("@d3", SqlDbType.DateTime).Value = GetMDYFrmCustDt(TextBox4.Text) 

    cmd.ExecuteNonQuery() 
    con.Close() 
    lblvalid.Visible = True 
    lblvalid.Text = "Record is inserted successfully" 

Catch ex As Exception 
    lblvalid.Text = (ex.Message) 

End Try 

Statt Code Sie folgenden Code verwenden können, das gleiche Funktionalität ohne Fehler liefert

Try 
    Dim ds As New DataSet 
    Dim Query As String = "Insert into test(name,date,d1,d2,d3)values('" & TextBox1.Text & "',Getdate(),'" & GetMDYFrmCustDt(TextBox2.Text) & "','" & GetMDYFrmCustDt(TextBox3.Text) & "','" & GetMDYFrmCustDt(TextBox4.Text) & "')" 
    Dim da As New SqlDataAdapter(qry, con) 
    da.Fill(ds) 

    lblvalid.Visible = True 
    lblvalid.Text = "Record is inserted successfully" 

Catch ex As Exception 
    lblvalid.Text = (ex.Message) 

End Try 
+0

Aber wie konvertiere ich es vor dem Einfügen von query.i habe bereits convert (varchar, d1.103) function.but es zeigt Fehler. – mrinal

+0

Welches Format betrachten Sie gerade in der Textbox? – Ravi

+0

Ich muss Datum in TT/MM/JJJJ-Format einfügen. Wenn ich Datum in TT/MM/JJJJ-Format einfügen, wird Datum im MM/TT/JJJJ-Format gespeichert.Wie ich es ändern. – mrinal

-1

Das Standardformat von Datum 'beim Einfügen Wert in datetime.I in nur Datum Form einfügen möge' ist mm/tt /. In Ihrem Fall ist das Textfelddatum im Format TT/MM/JJJJ. Zuallererst müssen Sie Ihr Datumsformat in das Format MM/TT/JJJJ konvertieren. dann speichern Sie es. Dann gibt es keinen Fehler. Um ein Datum zu formatieren, verwenden Sie den folgenden Code:

string [] str = TextBox1.Text.Split ('/'); // TT/MM/JJJJ-Format

Zeichenfolge d1 = str [1] + "/" + str [0] + "/" + str [2]; // mm/tt/jjjj format

speichere jetzt newdate d1 in d1 spalte.

+0

Dieser Code zeigt error.-Error1 -String 'ist ein Klassentyp und kann nicht als Ausdruck verwendet werden. Error2-Identifier erwartet. Error5-Argument nicht angegeben für den Parameter 'Number' von 'Public Function Str (Nummer als Objekt) als String'. – mrinal

+0

'Das Standardformat des Datums in der Datenbank ist mm/dd/yyyy', das ist einfach falsch. Ein Datum hat kein Format. Nur eine Zeichenfolgendarstellung eines Datums hat ein Format. Und das Standardformat einer Datenbank hängt stark von den dbms selbst und den regionalen Einstellungen ab. –

+0

Ich habe diese Antwort herabgestuft, weil sie wie alle anderen auf dieser Seite fälschlicherweise das Gebietsschema des US-Systems annimmt. Siehe meine Antwort für weitere Erklärungen. –

0

Der viel bessere Weg wäre, eine Datumsauswahl zu verwenden. Die Datumsauswahl kann einfacher sein Verfahren für Datum bezogenen Eingang Hier dtpDate ist ein Datumsauswahl

Format(dtpDate.Value.Date, "yyyy/MM/dd") 

kehrt im angegebenen Format stammen.

0

Die meisten, wenn Nicht alle Antworten und Kommentare auf dieser Seite konvertieren Daten in Zeichenfolgen und versuchen, das TT/MM/JJJJ in ein vermeintliches internes MM/TT/JJJJ-Format zu zwingen. Das ist einfach falsch! MM/TT/JJJJ ist nur eine lokale Darstellung eines Datums, das meistens in den USA verwendet wird, aber keinesfalls ein internes Speicherformat und alles, was bisher vorgeschlagen wurde, konvertiert einfach eine String-Darstellung in eine andere. Aus diesem Grund würde in Abhängigkeit von der Datenbank und den Ländereinstellungen des Computers keine der vorgeschlagenen Lösungen mit einem anderen Gebietsschema funktionieren.

Der Eingabezeichenfolgenwert muss in ein Datumsformat konvertiert werden, bevor er an die Parameters.Add-Funktion übergeben wird.

Die Klasse Vb.Net Date bietet eine leistungsstarke Funktion zum Konvertieren eines bekannten Zeichenfolgenformats in ein Datumsformat: ParseExact. Also, wohl wissend, dass das imput Format dd/mm/yyyy, sollte Ihr Code wie folgt aussehen:

 
    cmd.Parameters.Add("@d1", SqlDbType.DateTime).Value = Date.ParseExact(TextBox2.Text,"dd/MM/yyyy") 
    cmd.Parameters.Add("@d2", SqlDbType.DateTime).Value = Date.ParseExact(TextBox3.Text,"dd/MM/yyyy") 
    cmd.Parameters.Add("@d3", SqlDbType.DateTime).Value = Date.ParseExact(TextBox4.Text,"dd/MM/yyyy") 
Verwandte Themen