我有一个带有imports.aspx函数的ASP:FileUpload。
在我的代码背后,我有这样一个:
SEPTA_DSTableAdapters.ServiceTBLTableAdapter sta = new SEPTA_DSTableAdapters.ServiceTBLTableAdapter();
SEPTA_DSTableAdapters.RoutesTBLTableAdapter rta = new SEPTA_DSTableAdapters.RoutesTBLTableAdapter();
protected void Page_Load(object sender, EventArgs e)
{
ServiceDDL.DataBind();
}
protected void Submit_Click(object sender, ImageClickEventArgs e)
{
if (ImportRoutes.HasFile)
{
//Parse CSV
StreamReader reader = new StreamReader(ImportRoutes.FileContent);
var pathOfCsvFile = reader;
var adapter = new GenericParsing.GenericParserAdapter(pathOfCsvFile);
DataTable data = adapter.GetDataTable();
foreach (DataRow row in data.Rows)
{
int insertData = Convert.ToInt32(rta.InsertRoutes(Convert.ToInt32(row["RouteID"]), ServiceDDL.SelectedValue, row["ShortName"].ToString(), row["LongName"].ToString(), row["Type"].ToString(), row["Url"].ToString()));
}
}
}下面是我正在导入的代码的示例:
route_id,route_short_name,route_long_name,route_desc,agency_id,route_type,route_color,route_text_color,route_url
AIR,AIR,Airport Line, ,SEPTA,2,44697D,FFFFFF,
CHE,CHE,Chestnut Hill East, ,SEPTA,2,44697D,FFFFFF,
CHW,CHW,Chestnut Hill West, ,SEPTA,2,44697D,FFFFFF,
CYN,CYN,Cynwyd, ,SEPTA,2,44697D,FFFFFF,我的数据库列是:
RouteID
Category
ShortName
LongName
Type
Url以下是我的插入查询:
INSERT INTO [dbo].[RoutesTBL] ([RouteID], [Category], [ShortName], [LongName], [Type], [Url]) VALUES (@RouteID, @Category, @ShortName, @LongName, @Type, @Url)这是StackTrace
[ArgumentException: Column 'RouteID' does not belong to table .]
System.Data.DataRow.GetDataColumn(String columnName) +1775301
System.Data.DataRow.get_Item(String columnName) +13
Import.Submit_Click(Object sender, ImageClickEventArgs e) in c:\Documents and Settings\abpa\Desktop\ASP\SEPTAWeb\Import.aspx.cs:32
System.Web.UI.WebControls.ImageButton.OnClick(ImageClickEventArgs e) +108
System.Web.UI.WebControls.ImageButton.RaisePostBackEvent(String eventArgument) +118
System.Web.UI.WebControls.ImageButton.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) +36
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1565现在,我有两个问题。
int insertData部分上得到一个row does not exist错误,如何修复?先谢谢大家。
发布于 2010-08-26 17:02:13
你的第一个问题是:
DataTable data = adapter.GetDataTable();
foreach (DataRow row in data.Rows)
{
int insertData = Convert.ToInt32(rta.InsertRoutes(Convert.ToInt32(row["RouteID"]), ServiceDDL.SelectedValue, row["ShortName"].ToString(), row["LongName"].ToString(), row["Type"].ToString(), row["Url"].ToString()));
}正如您在CSV示例中所示,文件中的列是route_id,route_short_name,route_long_name,route_desc,agency_id,route_type,route_color,route_text_color,route_url,但是在代码中,您试图从行中获取一个名为RouteId的列,请尝试:
int insertData = Convert.ToInt32(rta.InsertRoutes(Convert.ToInt32(row["route_id"]), ServiceDDL.SelectedValue, row["route_short_name"].ToString(), row["route_long_name"].ToString(), row["route_type"].ToString(), row["route_url"].ToString()));对于第二个问题,您可以在GenericParserAdapter上设置一个属性来定义第一行是否被视为标题或数据,请查看它附带的帮助文件(.chm),以确定它的确切名称。不过,我怀疑它已经跳过了这一行。
另外,您可能需要考虑重新构造代码,使其更具可读性、可维护性和可调试性。试一试:
var routeId = Convert.ToInt32(row["route_id"]);
var routeShortName = Convert.ToString(row["route_short_name"]);
var routeLongName = Convert.ToString(row["route_long_name"]);
var routeType = Convert.ToString(row["route_type"]);
var routeUrl = Convert.ToString(row["route_url"]);
int insertData = Convert.ToInt32(rta.InsertRoutes(routeId, ServiceDDL.SelectedValue, routeShortName, routeLongName, routeType, routeUrl));更有可读性,嗯?
如果您能够添加对System.Data.DataSetExtensions的引用(即.net 3.5),那么您就可以使用DataRow.Field<T>扩展方法来进行更简洁的代码:
var routeId = row.Field<int>("route_id");
var routeShortName = row.Field<string>("route_short_name");
var routeLongName = row.Field<string>("route_long_name");
var routeType = row.Field<string>("route_type");
var routeUrl = row.Field<string>("route_url");https://stackoverflow.com/questions/3577083
复制相似问题