ASP .NET4 + Linq中的错误

时间:2015-04-17 07:52:57

标签: sql asp.net linq

我正在开发一个使用ASP .NET 4 C#(带Linq)和SQL服务器的项目。所有在我自己的计算机IIS上运行良好的页面并连接到本地sql数据库。如果从我的计算机连接到带有IIS的服务器数据库,则可以。如果打开发布的页面(因为它从服务器IIS运行并将连接到服务器数据库),则会发生错误。 来自服务器事件日志的错误是

  

日志名称:应用程序   资料来源:ASP.NET 4.0.30319.0   日期:2015年4月17日下午1:33:11   事件ID:1309   任务类别:Web事件   等级:警告   关键词:经典   用户:N / A.   计算机:SZHDB1.ds.jdsu.net   描述:   活动代码:3005   事件消息:发生了未处理的异常。   活动时间:2015年4月17日下午1:33:11   活动时间(UTC):2015年4月17日上午5:33:11   事件ID:89f5a478bff241d3aaa4798ce86ad707   事件顺序:22   事件发生:1   活动详细代码:0

     

申请信息:       应用领域:/ LM / W3SVC / 1 / ROOT / IMS-2-130737223782305527       信任等级:完整       应用程序虚拟路径:/ IMS       应用程序路径:D:\ WebSite \ IMS \       机器名称:SZHDB1

     

流程信息:       进程ID:3944       进程名称:w3wp.exe       帐户名称:IIS APPPOOL \ ASP.NET v4.0

     

异常信息:       异常类型:UpdateException       异常消息:更新条目时发生错误。有关详细信息,请参阅内部异常      在System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager,IEntityAdapter adapter)      在System.Data.Objects.ObjectContext.SaveChanges(SaveOptions选项)      在C:\ Users \ che57576 \ Documents \ Visual Studio 2010 \ Projects \ InstrManage \ InstrManage \ App \ Common.cs中的Log.set_storeLog(字符串值):第26行      at InstrManage.Admin.Group.GridView_group_SelectedIndexChanged(Object sender,EventArgs e)位于C:\ Users \ che57576 \ Documents \ Visual Studio 2010 \ Projects \ InstrManage \ InstrManage \ Admin \ Group.aspx.cs:第164行      在System.Web.UI.WebControls.GridView.HandleEvent(EventArgs e,Boolean causeValidation,String validationGroup)      在System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint,Boolean includeStagesAfterAsyncPoint)

     

字符串或二进制数据将被截断。   该语句已终止。      在System.Data.SqlClient.SqlConnection.OnError(SqlException异常,布尔breakConnection)      在System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()      在System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior,SqlCommand cmdHandler,SqlDataReader dataStream,BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj)      在System.Data.SqlClient.SqlDataReader.ConsumeMetaData()      在System.Data.SqlClient.SqlDataReader.get_MetaData()      在System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds,RunBehavior runBehavior,String resetOptionsString)      在System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior,RunBehavior runBehavior,Boolean returnStream,Boolean async)      在System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior,RunBehavior runBehavior,Boolean returnStream,String method,DbAsyncResult result)      在System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior,RunBehavior runBehavior,Boolean returnStream,String method)      在System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior,String method)      在System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior行为)      在System.Data.Mapping.Update.Internal.DynamicUpdateCommand.Execute(UpdateTranslator转换器,EntityConnection连接,字典2 identifierValues, List 1 generatedValues)      在System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager,IEntityAdapter adapter)

和相关代码在这里: ' Common.cs':

public class Log
{
string conn, username;
public string storeLog
{
    set
    {
        using (AdminEntities myEntrities = new AdminEntities(conn))
        {
            IMSlog log = new IMSlog();
            log.user_name = username;
            log.date_time = DateTimeOffset.Now;
            log.what = value;
            myEntrities.IMSlogs.AddObject(log);
            myEntrities.SaveChanges();    //this is line 26
        }
    }
}
public Log(string linqConn,string userName)
{
    conn = linqConn;
    username = userName;
}
}

' Group.aspx.cs':

protected void Page_Load(object sender, EventArgs e)
    {


            log = new Log(sqlconnstr, Session["UserName"].ToString());

    }

并在同一页面中,在事件中:

protected void GridView_group_SelectedIndexChanged(object sender, EventArgs e)
    {
        bool result;
        result = Int32.TryParse(GridView_group.SelectedRow.Cells[0].Text.ToString(), out index);
        currentStatus = (GridView_group.SelectedRow.FindControl("CheckBox1") as CheckBox).Checked;
            using (TransactionScope scope = new TransactionScope())
            {
                using (AdminEntities myEntrities = new AdminEntities(sqlconnstr))
                {
                    admin_group c = (from r in myEntrities.admin_group
                                     where r.group_id == index
                                     select r).First();
                    c.group_enable = !currentStatus;
                    myEntrities.SaveChanges();

                    log.storeLog = "Set group ID " + index.ToString() + " to    " + Convert.ToString(!currentStatus);    // this is line 164

                }
                scope.Complete(); //  To commit.

            }

            queryGroup();
    }

当触发上述事件时,将发生错误。

我从很多时候搜索,不知道为什么我的笔记本电脑没问题,但服务器不能。 我的笔记本电脑是win7和sql express。 server是asp .net 4和SQL server 2008。

2 个答案:

答案 0 :(得分:0)

问题似乎是你试图为数据库中的可用长度保存一个值太长。

要找到问题,请尝试查看您尝试保存的用户名的长度,并将其与数据库中可用的用户名进行比较。

通过在Common.cs中的第26行设置断点,您应该能够看到变量username的内容。

找到问题后,可以增加数据库的大小。此外,建议您直接在Web应用程序中验证用户名的长度,以便用户无法为您的数据库输入太长的用户名,应向用户发送一条错误消息,要求他使用较短的用户名。

答案 1 :(得分:0)

以下任务之一对于您的数据存储来说太大了

log.user_name = username;
log.date_time = DateTimeOffset.Now;
log.what = value;

您还可以检查log.date_time是否分配了正确的值