ถามเรื่อง insert ใน Sql CE หน่อยค่า

Last post 06-17-2008 19:44 by coreadmin. 8 replies.
Page 1 of 1 (9 items)
Sort Posts: Previous Next
  • 05-29-2008 10:50

    ถามเรื่อง insert ใน Sql CE หน่อยค่า

    คือว่าสงสัยอ่าค่ะว่า ถ้าเกิดมีอยู่ 2 form อย่างงี้อ่าค่ะ Form แรกเอาไว้แสดงข้อมูลใสฐานข้อมูลค่ะ ส่วนอีกพร้อมต้องกด new เพื่อที่จะทำการ insert แต่ว่าพอ insert แล้วจะมีเรียกดูอีก form นึงไม่ได้อ่าค่ะ ทั้งๆที่ update ได้ด้วยนะค่ะ เป็นเพราะอะไรอ่าค่ะ หรือว่าถ้าจะอัพเดทให้เห็นเลยทันทีต้องอยู่ใน Form เดียวกันหรอค่ะ ขอบพระคุณค่ะ
  • 05-30-2008 0:28 In reply to

    Re: ถามเรื่อง insert ใน Sql CE หน่อยค่า

    อาจจะเป็นเรื่องของ concurrency อ่ะคับ ปกติไม่เคยทดลอง หรือเจอเองเหมือนกัน ลองสั่งให้ form1 close connection ก่อนดิครับ อย่างน้อยข้อมูลมันก้อน่าจะเขียนลงไปในไฟล์ ให้เรา select ออกมาได้ใน form2 ตัว sqlce อาจจะแยกไม่ให้ connection ต่างกัน ไม่สามารถมองเห็นข้อมูลข้ามกันได้ (ประมาณว่า แยกกัน คนละ transaction) ถ้าเป็นไปได้ ลองใช้ connection ตัวเดียวกันเลยดิคับ ว่ามันหายมั๊ย

     

  • 05-30-2008 8:29 In reply to

    Re: ถามเรื่อง insert ใน Sql CE หน่อยค่า

    หวัดดีค่า คือตอนนี้อ่าค่ะ ย้ายมาอยู่ Form เดียวกันแล้ว เปิด ปิด connection ใหม่แล้วด้วยอ่าค่ะ แต่ว่าพอ SELECT จะูดูข้อมูลที่เพิ่งใส่เข้าไปอ่ะค่ะ มันไม่มี แต่ว่าพอเปิดโปรแกรม แล้วรันโปรแกรมใหม่และ SELECT ดูใหม่ ปรากฏว่ามันขึ้นมาแล้วอ่าค่ะ ก็เลยงง ไปไม่เป็นเลยอ่าค่ะ -_-!
  • 06-04-2008 17:43 In reply to

    Re: ถามเรื่อง insert ใน Sql CE หน่อยค่า

    ผมว่า ลองดัก Try{}Catch{} ที่ Connection ดูนะครับ เพราะ Database sqlCE สามารถที่จะ Open Conneciton ได้ทีละ 1 Connection นะครับ ถ้า สร้าง SqlCeConnection sqlConn = new SqlCeConnection(); try{ sqlConn.Open() ******sql Command******* } catch{ } finally{ sqlConn.Close() }
  • 06-12-2008 10:44 In reply to

    Re: ถามเรื่อง insert ใน Sql CE หน่อยค่า

    ลองเอาโค๊ดมาดูหน่อยได้ป่ะคับ ว่าเปิดปิดยังไง

    ถ้าให้ดูไม่ได้ (หวง) ก้อลองใช้ using ด้วยอ่ะคับ แบบนี้ จะได้ชัวร์ว่ามันปิดแน่ๆ

    using( SqlCeConnection conn = .... )
    {

         conn.Close();

    }

  • 06-12-2008 21:54 In reply to

    Big Smile [:D] Re: ถามเรื่อง insert ใน Sql CE หน่อยค่า

    แก้ได้เรียบร้อยแล้วค่า string path = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase); SqlCeConnection conn = new SqlCeConnection("Data Source = " + path + "//MyDatabase#1.sdf"); ตอนแรกใส่ conn.Open() ไ้ว้ตรงนี้อ่าค่ะ พอเอาออกปุ๊บ มันก็ insert ได้ปกติเลยอ่าค่ะ งงเหมือนกันอ่าค่ะ มีใครทราบรึเปล่าค่ะ ว่าทำไม adapt = new SqlCeDataAdapter("SELECT * FROM [UserDetail]", conn); data = new DataSet(); SqlCeCommandBuilder cmdBuilder = new SqlCeCommandBuilder(adapt); adapt.Fill(data, "UserTable"); ขอบคุณนะค่ะ
  • 06-15-2008 1:57 In reply to

    Re: ถามเรื่อง insert ใน Sql CE หน่อยค่า

    string path = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase);
    SqlCeConnection conn = new SqlCeConnection("Data Source = " + path + "//MyDatabase#1.sdf");
    adapt = new SqlCeDataAdapter("SELECT * FROM [UserDetail]", conn);
    data = new DataSet();
    SqlCeCommandBuilder cmdBuilder = new SqlCeCommandBuilder(adapt);
    adapt.Fill(data, "UserTable"); 

    อันนี้คือโค๊ดที่ผมเห็นนะคับ ดูแล้วก้อยังงงๆ นิดนึงอะ เหอๆ

    แต่เรื่องของเรื่องคือว่า ถ้าเราทำแบบนี้

    SqlCeConnection conn = new SqlCeConnection("Data Source = " + path + "//MyDatabase#1.sdf");
    conn.Open()

    SqlCeConnection conn2 = new SqlCeConnection("Data Source = " + path + "//MyDatabase#1.sdf");
    conn2.Open()

    conn กะ conn2 จะเหมือนว่า ทำงานอยู่คนละ Database ดังนั้น ถ้าผมใช้ conn ในการ Insert แล้วใช้ conn2 ในการ Select มันก้อจะมองข้อมูลจาก conn ไม่เห็นคับ จนกว่า conn จะสั่ง Close ไปอ่ะคับ

     

  • 06-17-2008 9:40 In reply to

    Re: ถามเรื่อง insert ใน Sql CE หน่อยค่า

    SqlCeConnection conn = new SqlCeConnection("Data Source = " + path + "//MyDatabase#1.sdf"); conn.Open() SqlCeConnection conn2 = new SqlCeConnection("Data Source = " + path + "//MyDatabase#1.sdf"); conn2.Open() ถ้าเราใช้ conn.Open แล้ว Insert ไป เสร็จแล้วไม่ Close Connection เราจะไม่สามารถใช้ conn2.Open ได้นะครับ เพราะDatabase 1ตัว สามารถ Open Connection ได้ทีละ 1 connection มันน่าจะประมาณนี้หรือเปล่า SqlCeConnection conn = new SqlCeConnection("Data Source = " + path + "//MyDatabase#1.sdf"); conn.Open() conn.Close() SqlCeConnection conn2 = new SqlCeConnection("Data Source = " + path + "//MyDatabase#1.sdf"); conn2.Open() conn2.Close()
  • 06-17-2008 19:44 In reply to

    Re: ถามเรื่อง insert ใน Sql CE หน่อยค่า

    จิงๆ Database ส่วนใหญ่เนี่ย  จะสามารถเปิด Connection ได้มากกว่า 1 Connection คับ นั่นจึงเป็นสาเหตุที่เราเรียก SQL Server/MySQL/Orable ว่า DBMS หรือ Database Management System อ่ะคับ มันจะมีความสามารถในการหลบหลีกให้เราเองว่า ข้อมูลที่ User เห็นในเวลาที่สั่ง Query จะเป็นอย่างไร รวมไปถึงจะเกิดอะไรขึ้น ถ้าเกิดมีคนกำลังสั่ง SELECT ขณะที่อีกคนสั่ง DELETE ซึ่ง SqlCe ก้อรองรับการติดต่อ มากกว่า 1 Connection พร้อมกันครับ

    พอดีว่าวันนี้ผมว่าง (ซะที) คับ เลยลองทดสอบโค๊ดให้ ปรากฏว่า ด้วย SQL Compact Edition 3.5 ข้อจำกัดนี้ เหมือนจะหายไปนะครับ คือว่า ด้วย Connection คนละตัว ผมสามารถ Select หลัง Insert ได้ทันที โดยที่ไม่ต้อง Close ก่อน

    string path = Assembly.GetExecutingAssembly().GetName().CodeBase;
    string file = Path.Combine(Path.GetDirectoryName(path), "AppDatabase1.sdf");

    SqlCeConnection conn = new SqlCeConnection(string.Format("Data Source={0}", file));
    SqlCeConnection conn2 = new SqlCeConnection(string.Format("Data Source={0}", file));

    SqlCeCommand cmd = conn.CreateCommand();
    SqlCeCommand cmd2 = conn2.CreateCommand();

    conn.Open();
    conn2.Open();

    cmd.CommandText = "INSERT INTO [table] VALUES('a')";
    cmd.ExecuteNonQuery();

    cmd2.CommandText = "SELECT * FROM [table]";
    SqlCeDataReader reader =  cmd2.ExecuteReader();
    bool read = reader.Read(); // true

    conn.Close();
    reader = cmd2.ExecuteReader();
    read = reader.Read(); //true

Page 1 of 1 (9 items)