สอบถาม การ import Excel ไป ยัง SQL server `ด้วยข้อมูลชนิด ทศนิยมครับ
คือ ผมลองแล้ว สามารถเพิ่มค่า ตัวอักษรได้ปกติ แต่ ดาต้า ที่เป็น ตัวเลข มีปัญหาครับ
ไม่ทราบว่าพอมีแนวทางการแก้ไขไหมครับ
protected void btImport_Click(object sender, System.EventArgs e)
{
//list<ชื่อตาราง>
List<testdbl> lsTestdbl = new
List<testdbl>();
if (FileUpload1.HasFile && Path.GetExtension(FileUpload1.FileName) == ".xlsx")
{
//ใช้ using statement ประกาศตัวแปล: excel เป็นอ็อบเจ็กต์ ExcelPackage โดยผ่านอินพุตสรีมที่อ่านได้จาก FileUpload1
using (var excel = new
ExcelPackage(FileUpload1.PostedFile.InputStream))
{
//ประกาศตัวแปล worksheet โดยกำหนดให้เท่ากับ sheet แรก
//int myid = PersonID.t
var worksheet = excel.Workbook.Worksheets.First();
//float worksheet2 = excel.Workbook.Worksheets.First();
//วนลูบแถวข้อมูลใน Excel โดยเริ่มที่ 2 จนถึงแถวสุดท้าย
// int num = string.IsNullOrEmpty(worksheet) ? 0 : int.Parse(worksheet);
for (int row = 2; row <= worksheet.Dimension.End.Row; row++)
{
//ประกาศตัวแปล เก็บข้อมูลคอลัมน์ต่างๆ
var PersonID = worksheet.Cells[row, 1].Value;//คอลัมน์ 1
var PersonName = worksheet.Cells[row, 2].Value;//คอลัมน์ 2
var PersonAge = worksheet.Cells[row, 3].Value;//คอลัมน์ 3
var PersonCity = worksheet.Cells[row, 4].Value;//คอลัมน์ 4
var PersonBugged = worksheet.Cells [row,5].Value;//คอลัมน์ 5
//เพิ่มข้อมูลที่อ่านได้จาก Excel ใส่เข้าไปในอ็อบเจ็กต์ List ของ Customer
//int myid = PersonID.Toi();
//float PersonBugged2 = float.Parse(PersonBugged);
//int num = string.IsNullOrEmpty(PersonID) ? 0 : int.Parse(PersonID);
// double bugged = Convert.ToDouble(PersonBugged);
lsTestdbl.Add(new testdbl
{
id = PersonID ==null ? "" : PersonID.ToString(),
name = PersonName == null ? "" : PersonName.ToString(),
age = PersonAge == null ? "" : PersonAge.ToString(),
city = PersonCity == null ? "" : PersonName.ToString(),
bugget =PersonBugged == null ? "" : PersonBugged.ToString()
});
//int num = string.IsNullOrEmpty(id) ? 0 : int.Parse(PersonID);
//double bugged = Convert.ToDouble(PersonBugged);
}
using (ADMS dc = new ADMS())
{
//คิวรี่ข้อมูล มาตรวจสอบ
foreach (var item in lsTestdbl)
{
var q = dc.testdbls.Where(t => t.id == item.id).FirstOrDefault();
//ถ้ายังไม่มีข้อมูล อยู่ในฐานข้อมูล (ให้เพิ่มได้)
if (q == null)
{ //ประตัวแปล:newCus โดยกำหนดให้เท่ากับ อ็อบเจ็กต์ใหม่ของ Customer
//พร้อมกับกำหนดค่าให้ อ็อบเจ็กต์ใหม่ของ Customer
var newPs = new testdbl
{
id = item.id,
name = item.name,
age = item.age,
city = item.city,
bugget = item.bugget
};
dc.testdbls.InsertOnSubmit(newPs);
dc.SubmitChanges();
}
}
}
//ผูกข้อมูลเข้า DataSource ของ GridView
GridView1.DataSource = lsTestdbl.ToList();
//ผูกข้อมูลเข้า DataSource ของ GridView
GridView1.DataBind();
//แสดงป้าย บอกให้ผู้ใช้งานทราบสถานะ การทำงาน
Label1.Text = "บันทึกข้อมูลเรียบร้อย";
}
}
else {//แสดงป้าย บอกให้ผู้ใช้งานทราบสถานะ การทำงาน
Label1.Text = "คุณไม่ได้ระบุไฟล์ที่จะอัปโหลด";
}
Tag : Ms SQL Server 2012, Excel (Excel.Application), LINQ, C#, Windows
Date :
2014-12-19 14:57:31
By :
jatupoom
View :
1252
Reply :
12
การ Insert,Update SQL data type เป็นสิ่งสำคัญมาก
แต่พอมาใช้ datasource ผมนิลืมข้อเสียตรงนั้นไปเลย 5555555
Date :
2014-12-19 15:09:47
By :
lamaka.tor
เอ้อ คือ ผมใช้ แบบ LINQ อะงับ มันง่ายดีเวลา ที่ต้องแอดข้อมูลปริมาณมากๆๆ
แ่ตอนนี้ ผมแอดค่า ตัวเลขกับทศนิยมไม่ได้ แหะๆ
คือแบบว่า ผมมือใหม่แกะกล่องจริง ๆ
ไม่ทราบว่าควรแอดไปที่ ไลน์ ไหน หรอครับ ตอน แปลงค่า
Date :
2014-12-19 15:24:01
By :
jatupoom
เพิ่มเติม ปกติพวกนี้ถ้า Data Type ไม่ถูก มันจะ Build ไม่ผ่านอยู่แล้วครับ
Date :
2014-12-19 15:28:29
By :
mr.win
ตามพี่ วิน แต่แนะนำนิด
วิธีบ้านๆของผม
คือ ทำ Data Type ให้ตรงกับ Data Type ของ database แค่นั้นแหละครับ
เฉพาะส่วนของการรับข้อมูลเข้าไป รึ จะเริ่มตั้งแต่ประกาศตัวแปรก็ไม่ผิด
***ที่สำคัญคือต้องมั่นใจว่า ทำ Data Type ให้ตรงกับ Data Type ของ database แค่นั้นแหละครับ
Date :
2014-12-19 15:38:49
By :
lamaka.tor
Date :
2014-12-19 16:04:15
By :
mr.win
ถ้าอยากชัวก็ใช้เป็น dynamic จะดีกว่าครับ
Date :
2014-12-19 16:27:10
By :
Programmer ด้อยปัญญา
Load balance : Server 03