これは私の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();
}
}
}
どこでエラーを起こしているのか、何かが欠けているのか誰か教えてください。
デバッグすると、このエラーが発生します
数値からキャストする場合、値は無限大よりも小さい数値でなければなりません
ほんとうにありがとう