5

我正在尝试将插入到 MS SQL Server 中已设置的数据库中,数据库服务器位于共享主机(godaddy)中。

我想要实现的是将一篇文章存储到数据库中,但每次我发布或预览文章时,服务器都会抛出我

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

Datetime在共享主机中有一个类型字段,它应该采用文章的日期,顺便说一句,它不会在其他文章表上引发此错误。就在这个,也许是错字或什么?

这是我的代码(引发错误的代码):

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();
        }
}
}

对不起,如果我写得太多,但我只是坚持这一点,也许我应该在服务器上设置日期时间格式?

任何人都可以对此有所了解吗?

4

5 回答 5

11

我会假设它Servicios具有DateTime未设置的属性。

DateTimes 不可为空,如果未设置,则默认为{1/1/0001 12:00:00 AM}.

在调用db.SubmitChanges()时,您试图将一个值插入到一个DateTime列中,该值是 SQL SERVER 支持的较低值,如您的异常所示。

SqlDateTime 溢出。必须介于 1753 年 1 月 1 日上午 12:00:00 和 9999 年 12 月 31 日晚上 11:59:59 之间。

于 2013-09-26T03:22:19.780 回答
4

尝试DateTime.Now,如果它textfeild DateTime.Now.ToString();希望这个工作的情况。

它在我几乎相同的情况下工作正常。

1/1/0001 12:00:00 AM 等是 sqlServer 的默认值,并且在上面的评论中,如果在删除方法后它什么都不做意味着它没有更新引用或类似的东西。

确保删除要删除的内容,如果没有,则通过更改属性并刷新+检查来强制执行

于 2013-09-26T06:12:38.827 回答
4

请注意,MS SQL ServerDateTime和 C#DateTime具有不同的MinValues。

虽然 MS SQL DateTime 仅在{1/1/1753 12:00:00 AM}C# DateTime 以{1/1/0001 12:00:00 AM}.

我想到了3种方法:

  1. 确保在您的代码中要保存的对象在保存之前设置了有效的 DateTime 值。其他海报已经为此提出了一些建议。

  2. 为数据库端的列添加默认值。对我来说,这似乎是最简单和最干净的方法。您既不需要更改数据类型,也不会影响您的代码,并且您将确保不会(或可以)保存无效日期。

  3. 如果这在您的开发阶段是可能的,您可以将列的数据类型更改为DateTime2,这允许日期以{1/1/0001 12:00:00 AM}. MSDN 文档在这里

于 2013-09-26T13:29:31.400 回答
1

According to me,it would be as follow:

datetime.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
于 2013-09-26T05:43:33.120 回答
1

我不明白您为什么要将日期时间转换为字符串?

 datetime.Text = DateTime.Now.ToString("yyyyMMddHHmmss");

如果您必须在数据库中插入日期时间,那么只需将该日期时间变量传递给插入命令。

DateTime dt = new DateTime();
dt = DateTime.Now.Date;

当您将其插入 DB 时,DB 会将其转换为适当的日期时间格式。去尝试一下。

于 2013-09-26T06:17:27.023 回答