我正在开发一个使用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。
答案 0 :(得分:0)
问题似乎是你试图为数据库中的可用长度保存一个值太长。
要找到问题,请尝试查看您尝试保存的用户名的长度,并将其与数据库中可用的用户名进行比较。
通过在Common.cs中的第26行设置断点,您应该能够看到变量username的内容。
找到问题后,可以增加数据库的大小。此外,建议您直接在Web应用程序中验证用户名的长度,以便用户无法为您的数据库输入太长的用户名,应向用户发送一条错误消息,要求他使用较短的用户名。
答案 1 :(得分:0)
以下任务之一对于您的数据存储来说太大了
log.user_name = username;
log.date_time = DateTimeOffset.Now;
log.what = value;
您还可以检查log.date_time
是否分配了正确的值