2010-02-21 4 views
5

Hey alle Ich versuche, die folgende INSERT-AbfrageFehler: Die Umwandlung eines nvarchar-Datentyp zu einem smallDatenTyp führten zu einem Out-of-Range-Wert

SqlDataSource userQuizDataSource = new SqlDataSource(); 
userQuizDataSource.ConnectionString = "Data Source=localhost\\SQLEXPRESS;Initial Catalog=quizApp;Integrated Security=True"; 
userQuizDataSource.InsertCommand = "INSERT INTO [UserQuiz] ([DateTimeComplete], [Score], [UserName]) VALUES (@DateTimeComplete, @Score, @UserName)"; 

userQuizDataSource.InsertParameters.Add("DateTimeComplete", DateTime.Now.ToString()); 
userQuizDataSource.InsertParameters.Add("Score", score.ToString()); 
userQuizDataSource.InsertParameters.Add("UserName", User.Identity.Name); 

int rowsAffected = userQuizDataSource.Insert(); 

Buti halten immer folgend zu tun Fehler:

The conversion of a nvarchar data type to a smalldatetime data type resulted in an out-of-range value. The statement has been terminated.

Kann mir jemand helfen?

Antwort

3

Was sagt Ihre Aussage DateTime.Now.ToString() zurück?

Welche Sprache und regionale Einstellungen erwartet Ihr SQL Server?

Haben Sie eine Diskrepanz ??? Möglicherweise gibt Ihr .NET ein MM/dd/yyyy-Format zurück, während SQL Server dd/MM/yyyy (oder umgekehrt) erwartet.

diesen Code in SQL Server-Versuchen:

DECLARE @test TABLE (smalldate SMALLDATETIME) 
INSERT INTO @test VALUES ('02/21/2010 22:00:32') -- 
SELECT * FROM @test 

Ersetzen Sie meinen String dort mit dem, was Ausgabe, die Sie von .NET 's Got DateTime.Now.ToString() - funktionierts? Gibt Ihnen SQL Server eine bessere Fehlermeldung?

Als nächstes versuchen Sie, das ISO-8601-Format für Daten zu verwenden (YYYYMMDD) - das funktioniert für ALL regionalen und Spracheinstellungen in SQL Server - funktioniert das?

DECLARE @test TABLE (smalldate SMALLDATETIME) 
INSERT INTO @test VALUES ('20100221 22:00:32') -- 
SELECT * FROM @test 
+0

vielen Dank ... das funktioniert !! Ich denke, das Problem war mehr die Tatsache, dass das Format des Datums auf meiner Maschine ist anders als das des Servers! – c11ada

+0

.net gibt das Datum im Format TT/MM/JJJJ zurück, und wenn ich den SQL-Server überprüft habe, ist das Datumsformat US-Style !! – c11ada

+2

Das sicherste Datumformat von .net zu sql, das ich bisher benutzt habe, ist "yyyy-MM-dd HH: mm: ss.fff". PK :-) –

0

Versuchen Sie, diese:

userQuizDataSource.InsertParameters.Add("DateTimeComplete", DateTime.Now.ToString()); 

dazu:

userQuizDataSource.InsertParameters.Add("@startdate", SqlDbType.DateTime, DateTime.Now.ToString()); 
+0

im immer 2 neue Fehler jetzt 1) Das Spiel am besten überladene Methode für 'System.Web.UI.WebControls.ParameterCollection.Add (string, string)' hat einige ungültige Argumente 2) Argument '2': Konvertierung von 'System.DateTime' zu 'string' – c11ada

0

keine Umwandlung Ihrer Datum Zeichenfolge Versuchen:

userQuizDataSource.InsertParameters.Add("DateTimeComplete", DateTime.Now); 

Edit: Versuchen Sie dies dann:

userQuizDataSource.InsertParameters.Add("DateTimeComplete", TypeCode.DateTime, DateTime.Now.ToString()); 

Es gibt eine andere Möglichkeit, das eigentliche Objekt zu übergeben, aber ich kann mich nicht erinnern .. sorry.

+0

ich bekomme jetzt 2 neue Fehler 1) Die beste überladene Methodenübereinstimmung für 'System.Web.UI.WebControls.ParameterCollection.Add (string, string)' hat einige ungültige Argumente 2) Argument '2': Umwandlung von 'System.DateTime' in 'String' nicht möglich – c11ada

+0

Entschuldigung, Sie haben Recht. Es gibt tatsächlich einen anderen Weg, nur das Objekt hinzuzufügen, datetime, aber ich kann mich nicht erinnern, VS wurde im Moment nicht geöffnet. Probieren Sie es auf der tatsächlichen Datenquelle und suchen Sie nach einer Methode wie AddParameterValue .. (String-Name, Objektwert) .. – ziya

1

Ich hatte das gleiche Problem datetime.now in meine SQL Server Spalte ‚Datum‘ gesetzt Hinzufügen Smalldatetime zu Datentyp.

zu beheben es ganz einfach war (nach vielen Versuchen !!)

string currentdatetime= 
DateTime.Now.Year + "." + DateTime.Now.Month + "." + DateTime.Now.Day + 
       " " + DateTime.Now.Hour+(":")+DateTime.Now.Minute+(":")+DateTime.Now.Second 

Hier wird das Datum in das Format, das der Server

0

In Windows 8, wenn Sie dies erwartet konfrontiert wird zurückkehren Problem auch nach Formats in unten Lage

Control Panel -> Region

Ändern Sie haben noch diese Einstellungen für Ihre Benutzer zu übertragen. Im selben Fenster, gehen Sie zum Tab "Administrative", klicken Sie auf Einstellungen kopieren.

Aktivieren Sie die entsprechenden Kontrollkästchen und klicken Sie auf OK.

Verwandte Themen