การโต้ตอบชุดข้อมูลและ gridview (การอัปเดตข้อมูล)

ฉันค่อนข้างใหม่กับ asp.net; แค่อยากแจ้งให้พวกคุณทราบก่อนที่จะอ่านคำถามของฉัน ฉันกำลังสร้างสมุดที่อยู่และฉันใช้ชุดข้อมูลเพื่อแสดงข้อมูลจากฐานข้อมูล SQL ของฉันใน gridview ที่อยู่ในหน้า aspx ฉันมีรหัสนี้จนถึงตอนนี้

            SqlConnection conn = new SqlConnection(conectionstring);
            conn.Open();
            string sql = "SELECT * FROM Directorio";
            SqlDataAdapter myCommand = new SqlDataAdapter(sql, conn);
            DataSet ds = new DataSet();
            myCommand.Fill(ds);
            DataView source = new DataView(ds.Tables[0]);
            GridView1.DataSource = source;
            GridView1.DataBind();

โค้ดนี้รับข้อมูลจากฐานข้อมูล เติมชุดข้อมูล และแสดงใน Gridview คำถามของฉันคือฉันจะเปลี่ยนแปลง gridview ได้อย่างไร จากนั้นอัปเดตชุดข้อมูลเพื่อให้สามารถใช้การเปลี่ยนแปลงในฐานข้อมูล SQL ได้ ฉันพบบทช่วยสอนมากมาย แต่มันทำสิ่งที่แตกต่างออกไป พวกเขาเชื่อมโยงฐานข้อมูลกับโปรเจ็กต์และไม่ได้เขียนโค้ดใดๆ เลย ฉันต้องการเรียนรู้วิธีดำเนินการด้วยตนเอง ฉันยังได้ลองเปิดใช้งานการแก้ไขในคุณสมบัติ gridview ที่สร้างคอลัมน์ที่มีปุ่มแก้ไข แต่เมื่อฉันคลิกมัน แอปก็ขัดข้อง ขอบคุณเพื่อนโปรแกรมเมอร์ของฉัน :)

PS: ฉันไม่เข้าใจสถาปัตยกรรม ADO.NET


person itsmedavid    schedule 09.02.2012    source แหล่งที่มา


คำตอบ (2)


โดยพื้นฐานแล้ว การควบคุมแหล่งข้อมูลจำเป็นต้องประสานการเปลี่ยนแปลง เนื่องจากมีความซับซ้อนในบริบทของสถาปัตยกรรม asp.net

ฉันคิดว่าฉันรู้ว่าคุณมาจากไหน และฉันก็อยู่ที่นั่นมาโดยตลอด - คุณอาจชอบบทความนี้: http://msdn.microsoft.com/en-us/library/aa581776.aspx

person Aaron Anodide    schedule 09.02.2012
comment
สวัสดี. ขอบคุณสำหรับคำตอบ บทช่วยสอนนั้นดูมีประโยชน์มาก แต่ความกังวลของฉันที่ไม่ได้ทำด้วยตนเองยังคงอยู่ และคุณอาจสงสัยว่าทำไมฉันถึงไม่อยากทำแบบนั้น เป็นเพราะในโครงการที่ผ่านมาที่ฉันพัฒนาใน vb และแบบฟอร์ม windows ที่ฉันใช้ และสร้างข้อขัดแย้งในการเข้าถึงฐานข้อมูลด้วยตนเอง - person itsmedavid; 09.02.2012
comment
บางทีสิ่งที่ดีที่สุดของทั้งสองโลกอาจเป็นถ้าคุณดูตัวอย่างของ ObjectDataSource msdn microsoft.com/en-us/library/ms178538.aspx - person Aaron Anodide; 09.02.2012

คุณมีตัวเลือกค่อนข้างน้อย ฉันสมมติว่าคุณกำลังใช้เว็บฟอร์มและ asp.net เทียบกับการใช้ asp.net MVC

ขึ้นอยู่กับความแข็งแกร่งของโครงการของคุณหรือวิธีที่คุณวางแผนจะนำไปใช้ คุณสามารถไปได้สองสามเส้นทาง หากคุณมีชั้นการเข้าถึงข้อมูล คุณสามารถใช้ EF (Entity Framework) เพื่อจัดการการดึงและส่งข้อมูลไปยังฐานข้อมูล EF ดีมากตรงที่จะจัดการการดำเนินการ CRUD มากมายให้กับคุณนอกเหนือจากเว็บฟอร์ม ไม่ใช่นามธรรมเต็มรูปแบบ แต่จะทำให้ sql ออกจากโค้ดของคุณที่อยู่ด้านหลังและเข้าสู่เลเยอร์ที่แยกจากกัน / จัดการได้

หากนี่เป็นโปรเจ็กต์ขนาดเล็กหรือสิ่งที่คุณเพิ่งเล่นคุณสามารถแทรกข้อมูลกลับเข้าไปในตารางโดยใช้ ado/sql เดียวกัน

public int CreateNewUser(string username, string password)
    {
        int insertUser = DatabaseUtilities.Perform_CRUD_Operation(
            String.Format(
                "INSERT INTO ContactsUser (UserName, Password) " +
                "VALUES ('{0}', '{1}',
                username, password),
            ConnectionString);
    }


//factored out the Perform operation for reuse in other classes you could do all this in one call 

public static int Perform_CRUD_Operation(string sqlStatement, string connectionString)
    {
        OleDbConnection con = new OleDbConnection("Provider=SQLOLEDB;" + connectionString);
        OleDbCommand cmd = new OleDbCommand(sqlStatement, con);

        try
        {
            con.Open();
            int affectedRows = cmd.ExecuteNonQuery();
            if (affectedRows == 1)
            {
                return 0;
            }
            else
            {
                return AFFECTED_ROWS_ERROR;
            }
        }
        catch (Exception)
        {
            return UNHANDLED_ERROR;
        }
        finally
        {
            con.Close();
        }
    } 

ข้างต้นนี้เป็นเพียงตัวอย่างเท่านั้น หากคุณกำลังทำอะไรก็ตามสำหรับโค้ดที่ใช้งานจริง ฉันขอแนะนำอย่างยิ่งว่า EF หรือใช้ขั้นตอนการจัดเก็บ การใช้โค้ดแบบด้านบนนั้นใช้ได้สำหรับการทดสอบหรือการพิสูจน์แนวคิด แต่มีความเสี่ยงมากสำหรับการฉีด sql และอาจไม่ปลอดภัยอย่างมาก

ส่วน Grid View ที่ไม่เห็นโค้ดจาก UI หรือโค้ดด้านหลังนั้น แทบจะเป็นไปไม่ได้เลยที่จะให้คำแนะนำว่าต้องทำอะไรหรือควรดูที่ไหน

person rlcrews    schedule 09.02.2012
comment
ขอบคุณมากที่สละเวลาตอบ ฉันซาบซึ้งมากและจะทำตามคำแนะนำของคุณอย่างแน่นอน - person itsmedavid; 09.02.2012