DateTime problème dans SQL Server
Je suis en train de faire une INSERTION dans une déjà mis en DB dans la MS SQL Server, le serveur de base de données est dans un hébergement mutualisé (godaddy).
Et ce que je suis en train de réaliser est de stocker un article dans la base de données, mais à chaque fois que je publie ou obtenir un aperçu de l'article, le serveur me jette
SqlDateTime overflow. Must be between 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.Data.SqlTypes.SqlTypeException: SqlDateTime overflow. Must be between 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM.
Source Error:
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
Stack Trace:
[SqlTypeException: SqlDateTime overflow. Must be between 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM.]
System.Data.SqlClient.TdsParser.TdsExecuteRPC(_SqlRPC[] rpcArray, Int32 timeout, Boolean inSchema, SqlNotificationRequest notificationRequest, TdsParserStateObject stateObj, Boolean isCommandProc, Boolean sync, TaskCompletionSource`1 completion, Int32 startRpc, Int32 startParam) +5635
System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite) +1379
System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite) +175
System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) +53
System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method) +134
System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior) +41
System.Data.Common.DbCommand.ExecuteReader() +12
System.Data.Linq.SqlClient.SqlProvider.Execute(Expression query, QueryInfo queryInfo, IObjectReaderFactory factory, Object[] parentArgs, Object[] userArgs, ICompiledSubQuery[] subQueries, Object lastResult) +1306
System.Data.Linq.SqlClient.SqlProvider.ExecuteAll(Expression query, QueryInfo[] queryInfos, IObjectReaderFactory factory, Object[] userArguments, ICompiledSubQuery[] subQueries) +118
System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression query) +342
System.Data.Linq.StandardChangeDirector.DynamicInsert(TrackedObject item) +145
System.Data.Linq.StandardChangeDirector.Insert(TrackedObject item) +215
System.Data.Linq.ChangeProcessor.SubmitChanges(ConflictMode failureMode) +378
System.Data.Linq.DataContext.SubmitChanges(ConflictMode failureMode) +372
System.Data.Linq.DataContext.SubmitChanges() +23
sgc.Servicio.CrearServicio.InsertDB(Object sender, EventArgs e) in CrearArticulo.aspx.cs:114
System.EventHandler.Invoke(Object sender, EventArgs e) +0
System.Web.UI.WebControls.Button.OnClick(EventArgs e) +9553178
System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +103
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +9642898
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1724
J'ai un Datetime
champ type de l'hébergement partagé qui devrait prendre de la date de l'article, d'ailleurs il ne me jette cette erreur sur d'autres tables d'articles. Juste sur ce point, peut-être une faute de frappe ou quelque chose?
C'est mon code (Le code qui génère l'erreur):
public partial class CrearServicio : System.Web.UI.Page
{
string tpCont = "1";
int estatus = 1;
bool withResponse = true;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
TextBox1.Attributes.Add("onKeyDown", "textCounter(this, 'counter1', 500)");
TextBox1.Attributes.Add("onKeyUp", "textCounter(this, 'counter1', 500)");
datetime.Text = DateTime.Now.ToString("yyyyMMddHHmmss");
if (Request.QueryString["tpCont"] != null)
{
tpCont = Request.QueryString["tpCont"];
volver.HRef = "elegir.aspx?tpCont=" + tpCont;
volver1.HRef = "elegir.aspx?tpCont=" + tpCont;
}
ConexionServiciosDataContext db = new ConexionServiciosDataContext();
tpContinpt.Text = tpCont;
int role = kernel.getUserRole(User.Identity.Name);
int tipoUsuario = role;
if (tipoUsuario == 1 || tipoUsuario == 2)
{
mainButton.Visible = true;
saveButton.Visible = true;
displayButton.Visible = true;
}
}
}
protected void SaveDBAndDisplay(object sender, EventArgs e)
{
withResponse = false;
SaveDB(sender, e);
}
protected void SaveDB(object sender, EventArgs e)
{
estatus = 2;
InsertDB(sender, e);
}
protected void InsertDB(object sender, EventArgs e)
{
tpCont = tpContinpt.Text;
if (TextArea1.Text.Length > 0)
{
ConexionServiciosDataContext db = new ConexionServiciosDataContext();
Servicios columna = new Servicios();
columna.Título = TextBox1.Text.ToString();
string line = TransformarString(TextArea1.Text.ToString());
columna.Contenido = line.ToString();
string[] IDsTitlesLocations = { };
db.Servicios.InsertOnSubmit(columna);
db.SubmitChanges();
}
}
}
Excusez-moi si j'écris trop, mais je suis juste bloqué sur ce, je devrais peut-être définir le format de date-heure sur le serveur?
N'importe qui pourrait faire la lumière sur cette?
- Sur quelle ligne l'erreur est-elle levée?
- Ok, j'ai fait un edit pour le aspx.cs code, l'erreur est renvoyée à la dernière ligne 'db.SubmitChanges();'
- Veuillez donner votre question, un titre significatif.
- Quelles sont les propriétés ne
Servicios
ont? - C'est parce que votre objet columna ont une date heure type de propriété ou d'une autre manière la table Services avoir un jour le temps de colonne qui n'est pas null et votre code ne gère pas d'assigner une valeur à elle. Attribuer date actuelle pour que les biens et votre problème sera résolu.
- À l'aide de SQL Server Profiler la capture de la
SQL
qui est envoyé au serveur. Il devrait être très évident que ce qui se passe ensuite. - Permettez-moi de l'essayer [stackoverflow.com/users/2589202/paqogomez]
- Ok Kundan, je vais vérifier dès maintenant
- Le générateur de profils SQL ne fonctionne que sur localhost ou à un réseau local serveurs [stackoverflow.com/users/2589202/paqogomez][Paco] Merci de toute façon
Vous devez vous connecter pour publier un commentaire.
Je suppose que
Servicios
aDateTime
propriété qui n'est pas réglé.DateTime
s ne sont pas prendre la valeur null, et quand ils ne sont pas mis, par défaut{1/1/0001 12:00:00 AM}
.Sur appel de
db.SubmitChanges()
, vous tentez d'insérer une valeur dans uneDateTime
colonne qui est une valeur plus faible que SQL SERVER prend en charge, comme on le voit dans vos exception.essayer
DateTime.Now
et si son cas detextfeild DateTime.Now.ToString();
espérons que ce travail.Il fonctionne très bien dans presque le même cas, j'ai.
1/1/0001 12:00:00 AM etc sont les valeurs par défaut de sql server et dans le commentaire ci-dessus si, après la suppression de la méthode de son de ne rien faire signifie que ce n'est pas la mise à jour de la référence ou quelque chose comme ça.
Assurez-vous que ce que vous voulez supprimer est supprimé et si ses pas, puis l'appliquer en modifiant les propriétés et d'actualisation de + vérifier
Être conscient que MS SQL Server
DateTime
et le C#DateTime
ont différents MinValues.Alors que MS SQL DateTime commence seulement à
{1/1/1753 12:00:00 AM}
le C# DateTime commencer avec{1/1/0001 12:00:00 AM}
.Il y a 3 approches qui viennent à mon esprit:
Assurez-vous que dans votre code que l'objet que vous souhaitez enregistrer a DateTime valide la valeur de set avant de l'enregistrer. Les autres affiches déjà fait quelques suggestions pour cette.
Ajouter une valeur par défaut à la colonne sur le côté de la base de données. Pour moi, cela semble être la méthode la plus simple et la plus propre approche. Vous n'avez ni besoin de changer le type de données, ni ne serait-il affecter votre code et vous assurez-vous qu'aucune date non valide devrait (ou pourrait) être sauvé.
Si c'est possible à votre stade de développement, vous pouvez modifier le type de données de la colonne à
DateTime2
, ce qui permet pour les dates de début avec{1/1/0001 12:00:00 AM}
. La documentation MSDN ici.Selon moi,ce serait comme suit:
Je ne peux pas comprendre pourquoi vous êtes la conversion d'un datetime en String ??
si vous devez insérer datetime dans votre base de données puis il suffit de passer cette variable datetime pour insérer la commande.
Lorsque vous insérez à DB, DB permettra de convertir son format datetime.
Il suffit de l'essayer.