2013-03-27 2 views
0

J'essaie d'obtenir la date sélectionnée à partir du contrôle de calendrier et de l'enregistrer dans une colonne de la base de données.ASP.NET - VB.NET - SQL Server Express 2012 - Dates de stockage

Je reçois l'erreur suivante:

SqlDateTime overflow. Must be between 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM.

Date de naissance colonne DB:

enter image description here

VB.Code pour la page d'inscription:

 Public Sub register() 



     Dim Username As String = txtUsername.ToString 
     Dim Surname As String = txtSurname.ToString 
     Dim Password As String = txtPassword.ToString 
     Dim Name As String = txtName.ToString 
     Dim Address1 As String = txtAddress1.ToString 
     Dim Address2 As String = txtAddress2.ToString 
     Dim City As String = txtCity.ToString 
     Dim Email As String = txtEmail.ToString 
     Dim Country As String = drpCountry.ToString 
     Dim DOB As Date = calDOB.SelectedDate.Date 
     Dim Occupation As String = txtOccupation.ToString 
     Dim WorkLocation As String = txtWorkLocation.ToString 
     Dim Age As Integer = "20" 

     lblDOB.Text = DOB.ToString 
     lblDOB.Visible = True 


     Dim ProjectManager As String = "test" 
     Dim TeamLeader As String = "test" 
     Dim TeamLeaderID As Integer = "1" 
     Dim ProjectManagerID As Integer = "1" 

     Dim RegistrationDate As Date = DateTime.Today 
     Dim ContractType As String = "test" 
     Dim ContractDuration As Integer = 6 
     Dim Department As String = "test" 

     Dim conn As New SqlConnection("Data Source=BRIAN-PC\SQLEXPRESS;Initial Catalog=master_db;Integrated Security=True") 
     Dim registerSQL As SqlCommand 
     Dim sqlComm As String 

     sqlComm = "INSERT INTO users(Username, Password, Name, Surname, Address1, Address2, " + 
      "City, Country, date_of_birth, age, Occupation, department, work_location, " + 
      "project_manager,team_leader, team_leader_id, project_manager_id, " + 
      "date_registration, contract_type, contract_duration) " + 
      "VALUES(@p1, @p2,@p3,@p4,@p5,@p6,@p7,@p8,@p9,@p10,@p11,@p12,@p13,@p14,@p15," + 
      "@p16,@p17,@p18,@p19,@p20)" 

     conn.Open() 
     registerSQL = New SqlCommand(sqlComm, conn) 
     registerSQL.Parameters.AddWithValue("@p1", Username) 
     registerSQL.Parameters.AddWithValue("@p2", Password) 
     registerSQL.Parameters.AddWithValue("@p3", Name) 
     registerSQL.Parameters.AddWithValue("@p4", Surname) 
     registerSQL.Parameters.AddWithValue("@p5", Address1) 
     registerSQL.Parameters.AddWithValue("@p6", Address2) 
     registerSQL.Parameters.AddWithValue("@p7", City) 
     registerSQL.Parameters.AddWithValue("@p8", Country) 
     registerSQL.Parameters.AddWithValue("@p9", DOB) 
     registerSQL.Parameters.AddWithValue("@p10", Age) 
     registerSQL.Parameters.AddWithValue("@p11", Occupation) 
     registerSQL.Parameters.AddWithValue("@p12", Department) 
     registerSQL.Parameters.AddWithValue("@p13", WorkLocation) 
     registerSQL.Parameters.AddWithValue("@p14", ProjectManager) 
     registerSQL.Parameters.AddWithValue("@p15", TeamLeader) 
     registerSQL.Parameters.AddWithValue("@p16", TeamLeaderID) 
     registerSQL.Parameters.AddWithValue("@p17", ProjectManagerID) 
     registerSQL.Parameters.AddWithValue("@p18", RegistrationDate) 
     registerSQL.Parameters.AddWithValue("@p19", ContractType) 
     registerSQL.Parameters.AddWithValue("@p20", ContractDuration) 




     registerSQL.ExecuteNonQuery() 


    End Sub 



End Class 

Exception Trace :

System.Data.SqlClient.SqlException was unhandled by user code 
    Class=16 
    ErrorCode=-2146232060 
    HResult=-2146232060 
    LineNumber=1 
    Message=String or binary data would be truncated. 
The statement has been terminated. 
    Number=8152 
    Procedure="" 
    Server=BRIAN-PC\SQLEXPRESS 
    Source=.Net SqlClient Data Provider 
    State=13 
    StackTrace: 
     at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) 
     at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) 
     at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) 
     at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) 
     at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) 
     at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite) 
     at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite) 
     at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean asyncWrite) 
     at System.Data.SqlClient.SqlCommand.ExecuteNonQuery() 
     at Registration.register() in C:\Users\Brian\Google Drive\Dropbox\Dropbox\THESIS\ThesisApp\Registration.aspx.vb:line 89 
     at Registration.btnRegister_Click(Object sender, EventArgs e) in C:\Users\Brian\Google Drive\Dropbox\Dropbox\THESIS\ThesisApp\Registration.aspx.vb:line 14 
     at System.Web.UI.WebControls.Button.OnClick(EventArgs e) 
     at System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) 
     at System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) 
     at System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) 
     at System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) 
     at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 
    InnerException: 

MISE À JOUR: Ajout d'un nouveau message d'erreur, que je fixe le RegistrationDate et date de naissance. Maintenant, je reçois un nouveau message d'erreur:

String or binary data would be truncated. 
The statement has been terminated. 

Toute aide est appréciée!

+0

@marc_s Je reçois toujours la même erreur! – Brian

+0

Quelle est la ** valeur ** de 'DOB' lorsque vous l'attribuez au paramètre? En outre: existe-t-il d'autres colonnes de type 'DATETIME' impliquées ici? Y at-il un déclencheur sur la table qui pourrait insérer un nouveau dans une table d'audit avec une colonne 'DATETIME'? –

+0

@marc_s Dim RegistrationDate As Date = Aujourd'hui mais son arrêt sur le DOB – Brian

Répondre

0

Quelle valeur avez-vous lorsque vous l'attribuez au paramètre @p9 ??

Ou pourrait RegistrationDate être le coupable? Quelle valeur cette variable a-t-elle lorsque vous l'affectez au paramètre @p18?

Cette erreur se produirait généralement si vous avez une colonne DATETIME dans SQL Server et que vous essayez d'insérer NULL à partir d'une application .NET en elle - qui est converti en 01/01/0001 qui est en dehors de la plage de valeurs de DATETIME.

donc ma recommandation: utiliser DATE (si vous avez besoin que la date - pas de temps) ou DATETIME2 (pour la date et l'heure) dans SQL Server 2008 et plus récent (DATETIME2 ne pas ont ces restrictions de plage de valeurs que DATETIME a)

+0

Donc 'Dim DOB As Date = calDOB.SelectedDate', puis' registerSQL.Parameters.AddWithValue ("@ p9", DOB) 'supposément devrait fonctionner 'out-of-the-box'? – Brian

+2

@Brian: bien sûr - mais ** quelle valeur ** est 'calDOB.SelectedDate' dans votre cas ?? Est-ce une valeur réelle ou est-ce «NULL» par hasard ?? –

+0

'calDOB.SelectedDate \t # 3/15/2013 # \t Date' – Brian

1

Cela pourrait être utile
http://jwcooney.com/2012/09/10/asp-net-choosing-parameters-add-or-parameters-addwithvalue/

esp.the deuxième point conversions de données implicites données sur les causes d'erreurs

..You can accidentally introduce data errors if you use the Parameters.AddWithValue syntax to send a date datatype to your database, then you are at the mercy of the database to identify how it will store your date value. This can lead to problems since there are numerous ways of entering dates: mm/dd/yyyy in North America, dd/mm/yyyy in the UK, and yyyy-mm-dd as an upcoming standard. The database will look at the date value of 1/2/2012 that you are sending and can handle the ’1′ as either the day or as the month.

Je recommande d'utiliser:

registerSQL.Parameters.Add("@p9", SqlDbType.DateTime).Value = DOB.Date 

au lieu de registerSQL.Parameters.AddWithValue("@p9", DOB)

assurez-vous que DOB n'est pas DateTime.MinValue ou DateTime.MaxValue

Voir aussi à cette question:

Difference between adding parameters to stored procedure in SQL Server 2005

+1

Je fais écho à cette réponse - J'ai rencontré ce genre de problème lors de l'utilisation de AddWithValue. –

Questions connexes