Note: เหมือนยังมี Error อยู่ ในบางกรณี ไม่แน่ใจว่า ผิดตรงไหน
update blob จากข้อมูลที่เก็บอยู่ใน textfile
- ถ้าใช้ sql ให้ดูที่ LOAD FROM File
- SQL + Informix: How do I add a blob when doing an insert? (Using the .NET (C#) SDK)
สร้างตารางทดสอบ
create table tbtest ( id SERIAL PRIMARY KEY, detail text, timestamp DATETIME YEAR TO FRACTION(5) DEFAULT SYSDATE YEAR TO FRACTION(5) );
สร้างฟังก์ชันใน C# ใช้ในการ update
public static string UpdateBlob(string query, string filename) { string connectionString = ConfigurationManager.AppSettings.Get("connectionString"); query = cleanQuery(query); log.Debug(query); byte[] data = File.ReadAllBytes(filename); string result = ""; using (var conn = new IfxConnection(connectionString)) { conn.Open(); IfxTransaction myTrans; // Start a local transaction myTrans = conn.BeginTransaction(IsolationLevel.ReadCommitted); using (IfxCommand command = new IfxCommand(query, conn)) { command.Transaction = myTrans; command.Parameters.Add("@binaryValue", IfxType.Byte).Value = data; try { int res = command.ExecuteNonQuery(); myTrans.Commit(); result = "success"; log.Info(result); } catch (Exception ex) { myTrans.Rollback(); result = ex.Message; log.Error(ex.Message); } } } return result; }
ทดลองเรียกใช้ฟังก์ชันแบบ INSERT
string filename = "logo.bmp"; string query = string.Format("INSERT into tbtest (detail) values(?);"); UpdateBlob(query, filename);
ทดลองเรียกใช้ฟังก์ชันแบบ UPDATE
string filename = "xxx.txt"; string query = string.Format("UPDATE tbtest SET detail = ? where id = 1;"); UpdateBlob(query, filename);
SELECT blob แล้วบันทึกเป็นรูป
public static void SelectBlob(string query) { try { // Open a connection IfxConnection conn = new IfxConnection(connIIA); conn.Open(); // Create an SQL command IfxCommand cmd = new IfxCommand(query, conn); IfxDataReader reader = cmd.ExecuteReader(); // Write the data to the console while (reader.Read()) { byte[] img = (byte[])reader["detail"]; string rowid = reader["id"].ToString(); string path = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, string.Format("x{0}.png", rowid)); System.IO.File.WriteAllBytes(path, img); } } catch (IfxException e) { log.Info(e.ToString()); } }
SELECT blob แล้วแปลงเป็น string
public static void SelectBlob(string query) { try { // Open a connection IfxConnection conn = new IfxConnection(connIIA); conn.Open(); // Create an SQL command IfxCommand cmd = new IfxCommand(query, conn); IfxDataReader reader = cmd.ExecuteReader(); // Write the data to the console while (reader.Read()) { byte[] bytes = (byte[])reader["LossDetail"]; // UTF conversion - String from bytes string utfString = Encoding.UTF8.GetString(bytes, 0, bytes.Length); log.Info(utfString); // Windows 874 string win874 = Encoding.GetEncoding(874).GetString(bytes, 0, bytes.Length); log.Info(win874); } } catch (IfxException e) { log.Info(e.ToString()); } }