บทความ – Uploads Excel files to SQL DB


1. ASP.Net 2.0 C#

2. SQL EXPRESS 2005

3. Excel 2003

เป็นบทความบน Greatfriends.biz

จาก…

ช่วยหนูด้วย เจออาจารย์ให้เพิ่ม คะ excel เข้า database ทำไงดี

ตอนแรกคิดว่าจะตอบสั้นๆ แต่ตอบไปตอบมา ยาวเลย post เป็นบทความน่าจะเข้าใจกว่า จึงเป็นที่มาของบทความนี้ เอาละเพื่อไม่เป็นการเสียเวลา ไปดูกันเลย…

เนื่องจากผู้ใช้งานส่วนใหญ่มีความคุ้นเคยกับการใช้งาน Excel เป็นประจำ ทำให้บางทีการ Input ข้อมูลผ่าน Windows form หรือ Web Form ของระบบทำให้ผู้ใช้งานรู้สึกไม่คล่องตัว จึงมีปัญหาต่างๆ ตามมา… เช่นผู้ใช้งานเริ่มรักคุณน้อยลง

ฉะนั้นทำอย่างไรให้ผู้ใช้งาน ใช้งานระบบใหม่แล้วรู้สึกว่า ทำงานได้เหมือนเดิม แต่ลดขั้นตอนการทำงานลง เช่น ไม่ต้องเอาข้อมูลใน Excel ป้อนลงบน Form แล้วจึงทำการบันทึกลง Data base …

การทำงานผ่านหน้า form แล้วรู้สึกไม่เหมือน บน Excel…

บทความนี้จะช่วยให้ผู้งานสามารถทำบนระบบใหม่ และระบบงานเก่า (Excel) ได้อย่างลงตัวมากขึ้น

System flow ระบบ (ย่อๆ)

1. ผู้ใช้งาน Input ข้อมูลผ่าน Excel

2. Upload Excel files ขึ้น Server เพื่อInsert เข้า Database

3. เรียกดูรายงานต่างๆ ตามระบบ…

เริ่มสร้าง Project กัน

1. สร้าง Project Web Site

2. เลือก Templates เป็น ASP.NET Web Site ดังรูป

3. ลาก Control FileUpload1, GridView1,… มาวางบน Form ดังรูป

4. สร้าง Folder Upload เพื่อเก็บ Excel file

ทดสอบ Run

หน้าตา Upload Excel file ไม่ต้องเน้นความสวยงาม

เริ่มเขียน Code กันเลย

Using namespace ดังนี้

using System.Text.RegularExpressions;

using System.Data.OleDb;

using System.Data.SqlClient;

ประกาศตัวแปรดังนี้

private string strConn = "";

private OleDbConnection exConn;//ติดต่อ Excel

private SqlConnection sqConn;//ติดต่อ SQL Server

private DataTable dt = null;//Table เก็บข้อมูล Excel

..

..

protected void Page_Load(object sender, EventArgs e)

{

}

..

..

1. ดับเบิ้ลคลิกบน Button Uploads (Button1)

protected void Button1_Click(object sender, EventArgs e)

{

if (FileUpload1.HasFile)

{

string filepath = FileUpload1.PostedFile.FileName;

string pat = @"\(?:.+)\(.+).(.+)";

Regex r = new Regex(pat);

Match m = r.Match(filepath);

string file_ext = m.Groups[2].Captures[0].ToString();

string filename = m.Groups[1].Captures[0].ToString();

string file = filename + "." + file_ext;

FileUpload1.PostedFile.SaveAs(Server.MapPath(".\Uploads\") + file);

Label1.Text = "File Saved to: " + Server.MapPath(".\Uploads\") + file;

ShowDatatoGrid(file);

}

}

# หาข้อมูลเพิ่มเติมได้จาก http://www.aspnettutorials.com/tutorials/network/net-fileupload-aspnet2-csharp.aspx

ต่อด้วย Method ShowDatatoGrid (string f) เพื่อติดต่อ Excel

private void ShowDatatoGrid(string f)

{

try

{

this.strConn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath(".\Uploads\")+f+ @";Extended Properties=""Excel 8.0;""";

this.GridView1.DataSource = getWorksheet("UesrName$");

this.GridView1.DataBind();

}

catch (Exception ex)

{

this.Label1.Text = ex.Message;

}

}

ต่อด้วย Method getWorksheet("UesrName$");

private DataTable getWorksheet(string worksheet)

{

DataSet m_ds = new DataSet();

try

{

exConn = new OleDbConnection(strConn);

exConn.Open();

OleDbDataAdapter m_da = new OleDbDataAdapter("SELECT * FROM [" + worksheet + "] ", exConn);

m_da.Fill(m_ds, "Table");

}

catch (Exception ex)

{

this.Label1.Text = ex.Message + "";

}

finally

{

exConn.Close();

}

if (m_ds.Tables.Count > 0)

{

return m_ds.Tables[0];

}

else

{

dt = new DataTable();

return dt;

}

}

2. ดับเบิ้ลคลิกบน Button Save to DB (Button2) เพื่อบันทึกข้อมูลลง Base

protected void Button2_Click(object sender, EventArgs e)

{

this.strConn = "Server=(local);uid=sa;pwd=xxx;database=TestDB;";

sqConn = new SqlConnection(this.strConn);

if (sqConn.State == ConnectionState.Closed)

sqConn.Open();

string SQL = "";

SqlTransaction tr = sqConn.BeginTransaction();

SqlCommand cmd = sqConn.CreateCommand();

try

{

cmd.CommandType = CommandType.Text;

cmd.Transaction = tr;

string userName;

string passWord;

string fName;

string lName;

//Loop เอาค่าใน GridView Insert ลง Base

for (int i = 0; i <= GridView1.Rows.Count – 1; i++)

{

userName = GridView1.Rows[i].Cells[0].Text.Trim();

passWord = GridView1.Rows[i].Cells[1].Text.Trim();

fName = GridView1.Rows[i].Cells[2].Text.Trim();

lName = GridView1.Rows[i].Cells[3].Text.Trim();

cmd.CommandText = "Insert Into UserName (UserName,Password,Fname,Lname) " +

" values (‘" + userName + "’,’" + passWord + "’,’" + fName + "’,’" + lName + "’)";

cmd.ExecuteNonQuery();

}

tr.Commit();

Label1.Text = "บันทึกข้อมูลเรียบร้อย";

}

catch (SqlException ex)

{

tr.Rollback();

Label1.Text = "Error – TRANSACTION ROLLED BACKn"+ex.Message;

}

catch (Exception ex)

{

tr.Rollback();

Label1.Text = "System Errorn"+ex.Message ;

}

finally

{

sqConn.Close();

tr.Dispose();

}

เริ่มทดสอบระบบ

1. Brows Excel file

2. คลิก Uploads Excel  File จะถูก Uploads ขึ้น Server และเปิดไฟล์ แสดงบน DataGrid

3.คลิก Save to DB เพื่อทำการ Insert ข้อมูลบน DataGrid ลง Base

อื่นๆ

1. Format Excel File 

2.ข้อมูล ที่ Insert ลง base เรียบร้อย

3. Script SQL สร้าง Table

CREATE TABLE [dbo].[UserName](

[UserName] [char](10) NOT NULL,

[Password] [char](10) NULL,

[Fname] [nvarchar](50) NULL,

[Lname] [nvarchar](50) NULL,

CONSTRAINT [PK_UserName] PRIMARY KEY CLUSTERED

(

[UserName] ASC

)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]

) ON [PRIMARY]

เห็นไหมครับเราสามารถ ทำระบบให้เอื้อต่อการใช้งานของผู้ใช้งานได้ โดยไม่กระทบการทำงานเดิมๆ ของผู้ใช้งานแค่นี้ผู้ใช้งานก็รักคุณแล้วละครับ…

ผิดพลาดประการใด ขอน้อมรับคำแก้ไขครับ…

 
 

Advertisements
เกี่ยวกับ

Nuchit Atjanawat is a Microsoft MVP, GreatFriends Community Leader, WindowsITPro Columnist(Mr.Nano), Silverlight Business Application Instructor, Speaker in various Microsoft events, Author, passionate Blogger and a Software Engineer by profession. He has a very good skill over Silverlight, LightSwitch, C#, XAML & Blend. He shares his technical findings, tutorials in his technical blog. Follow his Blog and Facebook page to be updated on latest articles. - Technical Blog: https://janawat.wordpress.com - WindowsITPro Columnist(Mr.Nano): http://windowsitpro.net - The GreatFriends.Biz Community Discussion Board (nano): http://greatfriends.biz - witter: https://twitter.com/janawat - Facebook Page: https://www.facebook.com/nuchit - Instructor: http://bit.ly/GF250-01, http://bit.ly/GF150-02

เขียนใน Web Application

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out / เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out / เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out / เปลี่ยนแปลง )

Connecting to %s

In Archive
%d bloggers like this: