2

这是我的第二个帖子。在从我的第一篇文章中了解到使用 Linq to SQL 是多么美妙之后,我想尝试将数据从 Excel 工作表导入我的 SQL 数据库。

首先是我的 Excel 表:

它包含4列,即

  • 编号
  • 物品尺寸
  • 项目价格
  • 售出单位

我创建了一个包含以下字段的数据库表

table name ProductsSold
  Id int not null identity --with auto increment set to true
  ItemNo VarChar(10) not null
  ItemSize VarChar(4) not null
  ItemPrice Decimal(18,2) not null
  UnitsSold int not null

现在我基于我的数据库创建了一个 dal.dbml 文件,并且我正在尝试使用下面的代码将数据从 excel 表导入到 db 表中。

一切都发生在点击一个按钮。

   private const string forecast_query = "SELECT ItemNo, ItemSize, ItemPrice, UnitsSold FROM [Sheet1$]";

    protected void btnUpload_Click(object sender, EventArgs e)
    {
        var importer = new LinqSqlModelImporter();

        if (fileUpload.HasFile)
        {
            var uploadFile = new UploadFile(fileUpload.FileName);

            try
            {
                fileUpload.SaveAs(uploadFile.SavePath);
                if(File.Exists(uploadFile.SavePath))
                {
                    importer.SourceConnectionString = uploadFile.GetOleDbConnectionString();
                    importer.Import(forecast_query);
                    gvDisplay.DataBind();
                    pnDisplay.Visible = true;
                }
            }
            catch (Exception ex)
            {
                 Response.Write(ex.Source.ToString());
                lblInfo.Text = ex.Message;

            }
           finally
            {
                uploadFile.DeleteFileNoException();
            }


        }
    }

    // Now here is the code for LinqSqlModelImporter

     public class LinqSqlModelImporter : SqlImporter
{
    public override void Import(string query)
    {
        // importing data using oledb command and inserting into db using LINQ to SQL
        using (var context = new WSDALDataContext())
        {
            using (var myConnection = new OleDbConnection(base.SourceConnectionString))
            using (var myCommand = new OleDbCommand(query, myConnection))
            {
                myConnection.Open();
                var myReader = myCommand.ExecuteReader();
                while (myReader.Read())
                {
                    context.ProductsSolds.InsertOnSubmit(new ProductsSold()
                    {
                        ItemNo = myReader.GetString(0),
                        ItemSize = myReader.GetString(1),
                        ItemPrice = myReader.GetDecimal(2),
                        UnitsSold = myReader.GetInt32(3)

                    });

                }
            }

            context.SubmitChanges();
        }
    }

}

有人可以告诉我我在哪里犯了错误,或者我是否遗漏了什么,但这让我发疯了。

当我调试时,我收到了这个错误

从数字转换时,值必须是小于无穷大的数字

对此,我真的非常感激

4

1 回答 1

2

一些选项:

  • myReader.GetValue(0),等上添加监视myReader.GetValue(1)以查看源值是什么。在引发错误的行上添加断点并查看导致问题的值。

  • 将您的对象初始化程序更改为单独的调用,以查看哪个列引发了错误:

ProductSold product = new ProductsSold();
product.ItemNo = myReader.GetString(0);
product.ItemSize = myReader.GetString(1);
product.ItemPrice = myReader.GetDecimal(2);
product.UnitsSold = myReader.GetInt32(3);
context.ProductsSolds.InsertOnSubmit(product);
于 2012-07-10T21:13:02.013 回答