system.invalidcast Exception?
“/Witkey/WebUISite”应用程序中的服务器错误。
--------------------------------------------
指定的转换无效。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.InvalidCastException: 指定的转换无效。
源错误:
行 39: {
行 40:
行 41: TaskInfo task = new TaskInfo(sdr.GetInt32(0), sdr.GetInt32(1), sdr.GetInt32(2), sdr.GetString(3), sdr.GetString(4), sdr.GetString(5), sdr.GetString(6), sdr.GetString(7), sdr.GetDecimal(8), sdr.GetDateTime(9), sdr.GetDateTime(10));
行 42: Task.Add(task);
行 43:
源文件: C:\Inetpub\wwwroot\Witkey\SqlServerInterface\Task.cs 行: 41
堆栈跟踪:
[InvalidCastException: 指定的转换无效。]
System.Data.SqlClient.SqlBuffer.get_Int32() +121
System.Data.SqlClient.SqlDataReader.GetInt32(Int32 i) +39
Witkey.SqlServerInterface.Task.GetTasks() in C:\Inetpub\wwwroot\Witkey\SqlServerInterface\Task.cs:41
Witkey.BLL.Task.GetTasks() in C:\Inetpub\wwwroot\Witkey\BLL\Task.cs:19
Witkey.Web.Controls_TaskControl.taskList_Load(Object sender, EventArgs e) in c:\Inetpub\wwwroot\Witkey\WebUISite\Controls\TaskControl.ascx.cs:23
System.Web.UI.Control.OnLoad(EventArgs e) +99
System.Web.UI.WebControls.BaseDataList.OnLoad(EventArgs e) +114
System.Web.UI.Control.LoadRecursive() +47
System.Web.UI.Control.LoadRecursive() +131
System.Web.UI.Control.LoadRecursive() +131
System.Web.UI.BasePartialCachingControl.LoadRecursive() +113
System.Web.UI.Control.LoadRecursive() +131
System.Web.UI.Control.LoadRecursive() +131
System.Web.UI.Control.LoadRecursive() +131
System.Web.UI.Control.LoadRecursive() +131
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1061
--------------------------------------------
版本信息: Microsoft .NET Framework 版本:2.0.50727.42; ASP.NET 版本:2.0.50727.42
public IList <TaskInfo> GetTasks()
{
return dal.GetTasks();
}
--------------
public IList <TaskInfo> GetTasks()
{
IList <TaskInfo> Task = new List <TaskInfo> ();
using (SqlDataReader sdr = SqlHelper.ExecuteReader(SqlHelper.ConnectionStringLocalTransaction, CommandType.Text, Sql_Select_Tasks, null))
{
while (sdr.Read())
{
TaskInfo task = new TaskInfo(sdr.GetInt32(0), sdr.GetInt32(1), sdr.GetInt32(2), sdr.GetString(3), sdr.GetString(4), sdr.GetString(5), sdr.GetString(6), sdr.GetString(7), sdr.GetDecimal(8), sdr.GetDateTime(9), sdr.GetDateTime(10));
Task.Add(task);
}
sdr.Close();
}
return Task;
}
----------------
[解决办法]
TaskInfo task = new TaskInfo(sdr.GetInt32(0), sdr.GetInt32(1), sdr.GetInt32(2), sdr.GetString(3), sdr.GetString(4), sdr.GetString(5), sdr.GetString(6), sdr.GetString(7), sdr.GetDecimal(8), sdr.GetDateTime(9), sdr.GetDateTime(10));
====================================================================
你是否确认你取出来的数据的数据类型和你所Get的一一对应?也就是说在数据库里第一个到第十一个的类型分别是 整型、整型、整型、字符、字符、字符、字符、字符、浮点、日期、日期
而且由于你是放在IList中,似乎没有必要数据类型这么精确,可以都是用sdr.GetValue(0).ToString(),sdr.GetValue(1).ToString(),sdr.GetValue(3).ToString(),....sdr.GetValue(10).ToString(),