这是我的代码:
mod.SystemID = Convert.ToInt32(ExcelData.Columns["SysID"]);
这是我的错误信息:
无法将“System.Data.DataColumn”类型的对象转换为“System.IConvertible”类型。
我正在尝试获取“SysID”列的值并将其转换为整数。但是,编译器认为我正在尝试转换实际列,而不是值。对于我的生活,我无法弄清楚这一点。我知道我遗漏了一些明显的东西,我什至尝试添加一个.value
(示例:),Columns["SysID"].value;
但事实并非如此。有人可以告诉我我在这里缺少什么吗?
谢谢!
编辑:为清楚起见,我在下面添加了整个程序。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.OleDb;
using System.Data;
namespace CopyExcel
{
class Program
{
static void Main(string[] args)
{
var fileName = string.Format("{0}\\MaintList.xlsx", "C:\\Import");
var connectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0; data source={0}; Extended Properties=Excel 8.0;", fileName);
var db = new ModulesDataContext();
var adapter = new OleDbDataAdapter("SELECT * FROM [AM IST$]", connectionString);
var ds = new DataSet();
adapter.Fill(ds, "ExcelData");
DataTable ExcelData = ds.Tables["ExcelData"];
foreach (DataRow row in ExcelData.Rows)
{
Module mod = new Module();
mod.SystemID = Convert.ToInt32(ExcelData.Columns["SysID"]);
mod.Module1 = ExcelData.Columns["Num"].ToString();
mod.Title = ExcelData.Columns["Title"].ToString();
db.Modules.InsertOnSubmit(mod);
db.SubmitChanges();
}
}
}
}
另一个编辑:
好的,我尝试更改给我带来问题的行:
mod.SystemID = Convert.ToInt32(ExcelData.Rows[row]["SysID"]);
但是,编辑器在它下面放了一条曲线,当我尝试运行程序时收到一条错误消息:
错误 1 'System.Data.DataRowCollection.this[int]' 的最佳重载方法匹配有一些无效参数
对代码进行了以下更改,现在可以完美运行:
var counter = 0;
foreach (DataRow row in ExcelData.Rows)
{
Module mod = new Module();
mod.SystemID = Convert.ToInt32(ExcelData.Rows[counter]["SysID"]);
mod.Module1 = ExcelData.Rows[counter]["Num"].ToString();
mod.Title = ExcelData.Rows[counter]["Title"].ToString();
mod.Type = "ICW";
db.Modules.InsertOnSubmit(mod);
db.SubmitChanges();
counter++;
}