ช่วยหน่อยครับ การใช้ภาษไทยกับ MySql ด้วย C# ผมเขียนโปรแกรมแบบ Client Server ด้วย C# กับ Mysql ครับ
เอาแบบสั้นๆดีกว่าค่ะ ไม่มีเวลาเขียนไรยาว งานตัวเองก้อเยอะ
1. สร้าง table ด้วย encoding tis-620 ยังไม่แนะนำให้ใช้ unicode ค่ะ collate มานเพี้ยน
2. ไปโหลดเอา Connector/Net is a fully-managed ADO.NET driver for MySQL
ใน document หรือ help file มีตัวอย่างการเชื่อมต่อและวิธีเขียน interface ครบค่ะ
Date :
2010-07-09 16:44:11
By :
blurEyes
ลองใช้ connectionstring แบบนี้ดูคับ
DSN=dsnname;userid=username;password=password;charset=tis-620
Date :
2010-07-09 18:31:20
By :
Programmer ด้อยปัญญา
ยังคงแนะนำให้ใช้ mySQL Connector .NET แทน ODBC ค่ะ
เพราะได้หลายอยางเช่น visual tools ที่ เป็น plug in เข้า visual studio
ซึ่งปกติ ใน windows server explorer จะไม่รุจัก mySQL แต่
ด้วย .net connector เราจา mange database table query ได้ลักษณะเดียวกันกับ
MS SQL SERVER เลยค่ะ
ก้อเขียนด้วย c# เป็น full manged code เวลารันไร้รอยต่อใดๆค่ะ
อีกอย่าง odbc ยังต้องเขียนไฟล์ dsn อยู่ถึงจะมีวิธีเขียนแบบ dsn-less
แต่ก้อแยกส่วนไม่ได้แนบสนิทเข้ากับ .net เหมือน mySQL Connector .NET
เพราะใช้ CLASS FACTORY ตามนิยามของ data provider เลย
กำหนดเพียง connection string ใน web.config หรือ app.config
ซึ่งในกรณีที่ไม่อยากให้ใครนอกจาก developer เห็น ก้อยังเข้ารหัสได้ด่วยค่ะ
ในกรณีภาษาไทย หาก table กำหนดอย่างไร .net จะจัดการ
เปลี่ยน encode ให้เองอัตโนมัติ ซึ่งเป็นการจัดการแบบใหม่
ที่ใช้กับทุก data provider
ข้อดีมีมากกว่าค่อนข้างเยอะค่ะ
Date :
2010-07-09 21:42:10
By :
blurEyes
ตัวtable ผมต้องimportมาจากDBF น่ะครับ ถ้าimportเป็นtisมันจะerrorเลยกำหนดเป็นutf8น่ะครับ ไม่รู้ว่าถูกไหม
ส่วนตอนconnectก็กำหนดcharsetเป็นtis620แล้วครับ ก็ยังไม่ได้ ไม่รู้ว่าผิดตรงไหน ช่วยหน่อยนะ
Code (C#)
string ConnectionString = "SERVER=localhost;" +
"DATABASE=mydata;" +
"UID=root;" +
"PASSWORD=1234;" + "charset=tis620;";
MySqlConnection connection = new MySqlConnection(ConnectionString);
//Connecting to MySQL
connection.Open();
MySqlCommand cmd = connection.CreateCommand();
cmd.CommandText = "SELECT * FROM contact2_bk";
cmd.CommandType = CommandType.Text;
MySqlDataReader reader = cmd.ExecuteReader();
string a = "";
while (reader.Read())
{
Console.WriteLine(reader.GetString("FIRSTNAME").ToString());
a = reader.GetString("FIRSTNAME").ToString();
}
Date :
2010-07-09 21:42:33
By :
kaoru_ce
โหย dbf ใช่ ascii code เลยปะน่ะคะ
ตัว code น่ะถูกค่ะ แต่เรื่องภาษาลองอ่านจาก dbf ดิคะ
ว่ามันเก็บแบบไหน
Date :
2010-07-09 21:44:52
By :
blurEyes
กำหนดapp.config ยังไงหรอครับ
Date :
2010-07-09 21:56:15
By :
kaoru_ce
ลองใช้ navicate นั่นอะคะ select ข้อมูลที่เป็นภาษาไทยออกมาดู
ถ้าถูกแล้วก้อข้ามไป แต่กรุณาตรวจสอบ encoding ที่ table property ด้วยนะคะ ว่าใช้ TIS-620 ไหม
ถ้าไม่ใช่ มาว่ากันอีกที อาจจะต้องนำเข้าโดยการอ่านใหม่
ส่วนเรื่อง app.config
Solution explorer >> right click ที่ชื่อ project >> Add new item
>> Application configuration .... ok
แล้วเปิด app.config ที่แอดเข้ามา
แก้ไขโครงสร้างใน VSS นั่นแหละค่ะ เพิ่ม ConnectionString ของคุณลงไป
วิธีนี้สั้นๆ อาจไม่ถูกต้องนักเอาว่า ง่ายๆก่อนละกันค่ะ
Code (C#)
< ?xml version="1.0" encoding="utf-8" ?>
< configuration>
< appSettings>
< add key="MyDataConnectionStringFromAppSettingSection"
value="SERVER=localhost;DATABASE=mydata;UID=root;PASSWORD=1234;charset=tis620;"/>
< /appSettings>
แล้วก้อ save ไป
ทีนี้ใน App ก้อแก้นิดหน่อยเป็น
Code (C#)
string ConnectionString =ConfigurationSettings.AppSettings("MyDataConnectionStringFromAppSettingSection")
MySqlConnection connection = new MySqlConnection(ConnectionString);
//Connecting to MySQL
connection.Open();
MySqlCommand cmd = connection.CreateCommand();
cmd.CommandText = "SELECT * FROM contact2_bk";
cmd.CommandType = CommandType.Text;
MySqlDataReader reader = cmd.ExecuteReader();
string a = "";
while (reader.Read())
{
Console.WriteLine(reader.GetString("FIRSTNAME").ToString());
a = reader.GetString("FIRSTNAME").ToString();
}
อีกอย่างถ้าจะเทสกัน สร้าง windows app แล้ว bindData เพื่อทดสอบดีกว่าค่ะ เพราะบางทีเทสใน console
อาจมองไม่ชัด
คุณไปสร้าง win app มาแล้วใน form ใส่ Grid ไปตัวนึง
แล้ว สร้าง datatable มา << ไปลองหาวิธีสร้างมาด้วยค่ะ น่าจะทำได้ในกระทู้มีตัวอย่างเยอะ
แล้วเอามา bind กับ grid แล้วมาดูผลค่ะ ภาษาไทยถูกต้องไหม
อีกอย่าง ลอง ORDER BY ชื่อคอลัมภ์ที่เก็บข้อมูลภาษาไทยด้วย ดูว่าการเรียงลำดับ
หมวดหมู่ถูกต้องหรือเปล่า เช่น โกรินทร์ เกชา กานดา ควรอยู่เรียงลำดับกัน ไม่ใช่ สระโอไปกองกันอีกที่นึง
ซึ่งถ้าข้อมุลencoding ถูกมาแล้วก้อไม่น่ามีปัญหา ต่อจากนี้ก้อเขียนไปตามที่คุณต้องการค่ะ
ปล.เรื่องมือใหม่ไม่ต้องย้ำหรอกค่ะ ทราบแล้ว
ยังไงก้อจะพยายามแนะแต่คุณก้อหาข้อมูลประกอบไปด้วย ทุกคนมีเรื่องที่ต้องทำกันด้วยกันทุกคนค่ะ
Date :
2010-07-10 13:41:18
By :
blurEyes
encodeที่ใช้ผมใช้เป็นutf8 ครับ เพราะว่าผมลองใช้tis620 แล้วมันimportข้อมูลเข้าไม่ได้ครับ
จะต้องนำเข้าใหม่ป่าวครับ ยังไงครับ
แล้วโค้ดตรง string ConnectionString =ConfigurationSettings.AppSettings("MyDataConnectionStringFromAppSettingSection
ผมลองเพิ่มเข้าไปแล้วมันcomplie error ครับ มันขึ้นว่า'System.Configuration.ConfigurationSettings.AppSettings' is a 'property' but is used like a 'method' ครับ
Date :
2010-07-10 21:15:38
By :
kaoru_ce
[2010-07-10 21:53:13] [Msg] Create table [contact_tis]
[2010-07-10 21:53:13] [Msg] Import table [contact_tis]
[2010-07-10 21:53:13] [Err] 1366 - Incorrect string value: '\xE4\xCA\xC7' for column 'FIRSTNAME' at row 2
ข้างบนเป็น error ตอน importแบบ tis620 ครับ
Date :
2010-07-10 21:56:35
By :
kaoru_ce
อันนี้ของ vb
ConfigurationSettings.AppSettings("MyDataConnectionStringFromAppSettingSection")
แก้ให้เป็นของ c#
ConfigurationSettings.AppSettings["MyDataConnectionStringFromAppSettingSection"]
ต่างกันที่วงเล็บ โทดค่ะพักนี้แก้ code ชาวบ้านเยอะ ภาษาเลยตีกัน จนขี้เลื่อยไหลมาเป็นกองๆๆแร้ว
ต้องหาเวลาโกยขี้แกลบเข้าไปแทนละค่ะ
แล้วถ้าฐานข้อมูลเป็น UTF8 และเครื่องมืออัตโนมัติแก้ไขให้ไม่ได้ก้อคงต้องทำเอง
UTF8 ก้อดีอย่างคือเป็นมาตรฐานแต่อย่างที่บอกยังไม่มี Collate สำหรับภาษาไทยใน Code แบบ
UTF8 เท่านั้นเองค่ะ แต่ตอนนี้การแสดงผลคงไม่มีปัญหาแล้วมั้งคะ
และมีข้อแนะนำเพิ่มเติมค่ะ
ผม ใช้ MySql .NET/Connector 1.0.7 แล้ว select ข้อมุลที่เป็น ภาษาไทยแล้วไม่ได้ครับ
Date :
2010-07-10 22:14:28
By :
blurEyes
ผมลองทำตามที่บอกทุกอย่างแล้วครับ ยังแสดงผลไม่ได้เหมือนเดิม ไม่รู้นำเข้าข้อมูลผิดหรือป่าว
ขนาดลองสร้างdbสร้างตารางใหม่เป็นtis620พิมพ์ข้อมูลภาษาไทยเข้าไปเองยังไม่ได้เลยครับ เหนื่อยใจจิงๆ
ยังไงก็ขอขอบคุณคุณstupid gurl มากนะครับที่ช่วยครับ
Date :
2010-07-11 13:18:24
By :
kaoru_ce
ออนั่นอะดิ มันเป็นรัยหรอหรือว่าตอนลง msql server เลือก latin มาละคะ
มันต้องเลือก tis620 มาจากตงนู้นเลยอะค่ะ
Date :
2010-07-11 13:55:05
By :
blurEyes
Load balance : Server 00