โปรแกรมบริหารจัดการเบี้ยยังชีพ/สอน C#.NET แบบเชิงลึก Real Time

ในห้อง 'คอมพิวเตอร์ & อินเตอร์เน็ต' ตั้งกระทู้โดย ledphong, 9 สิงหาคม 2014.

  1. ledphong

    ledphong เป็นที่รู้จักกันดี

    วันที่สมัครสมาชิก:
    28 มีนาคม 2009
    โพสต์:
    1,425
    ค่าพลัง:
    +165
    คอลัมน์ช่วงวันหยุด WPF

    Code
    ======================================
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Navigation;
    using System.Windows.Shapes;
    using System.Data.SqlClient;
    using System.Data;

    namespace DatabaseApplication
    {
    /// <summary>
    /// Interaction logic for Window1.xaml
    /// </summary>
    public partial class Window1 : Window
    {
    public Window1()
    {
    InitializeComponent();
    }

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
    ShowData();
    }
    private void btnAdd_Click(object sender, RoutedEventArgs e)
    {
    string Username = textBox1.Text;
    string password = textBox2.Text;
    SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;User Instance=True");
    con.Open();
    SqlCommand comm = new SqlCommand("insert into userdata(username,password) values(@username,@password)", con);
    comm.Parameters.AddWithValue("@username", textBox1.Text);
    comm.Parameters.AddWithValue("@password", textBox2.Text);
    comm.ExecuteNonQuery();
    con.Close();
    ShowData();
    }

    private void btnClear_Click(object sender, RoutedEventArgs e)
    {
    textBox1.Text = "";
    textBox2.Text = "";
    }
    public void ShowData()
    {
    SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;User Instance=True");
    con.Open();
    SqlCommand comm = new SqlCommand("Select * from userdata", con);
    DataTable dt = new DataTable();
    SqlDataAdapter da = new SqlDataAdapter(comm);
    da.Fill(dt);
    listView1.DataContext = dt.DefaultView;
    }

    private void btnDelete_Click(object sender, RoutedEventArgs e)
    {
    if (listView1.SelectedItems.Count > 0)
    {
    DataRowView drv = (DataRowView)listView1.SelectedItem;
    string id = drv.Row[0].ToString();
    SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;User Instance=True");
    con.Open();
    SqlCommand comm = new SqlCommand("delete from userdata where id=@id", con);
    comm.Parameters.AddWithValue("@id", id);
    comm.ExecuteNonQuery();
    ShowData();
    }
    }

    private void btnUpdate_Click(object sender, RoutedEventArgs e)
    {
    if (listView1.SelectedItems.Count > 0)
    {
    DataRowView drv = (DataRowView)listView1.SelectedItem;
    string id = drv.Row[0].ToString();
    SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;User Instance=True");
    con.Open();
    SqlCommand comm = new SqlCommand("update userdata set username=@username,password=@password where id=@id", con);
    comm.Parameters.AddWithValue("@id", id);
    comm.Parameters.AddWithValue("@username", textBox1.Text);
    comm.Parameters.AddWithValue("@password", textBox2.Text);
    comm.ExecuteNonQuery();
    con.Close();
    ShowData();
    }

    }


    }
    }
     

    ไฟล์ที่แนบมา:

    • WPF.jpg
      WPF.jpg
      ขนาดไฟล์:
      259.9 KB
      เปิดดู:
      105
    • WPF2.png
      WPF2.png
      ขนาดไฟล์:
      45.8 KB
      เปิดดู:
      90
  2. ledphong

    ledphong เป็นที่รู้จักกันดี

    วันที่สมัครสมาชิก:
    28 มีนาคม 2009
    โพสต์:
    1,425
    ค่าพลัง:
    +165
  3. ledphong

    ledphong เป็นที่รู้จักกันดี

    วันที่สมัครสมาชิก:
    28 มีนาคม 2009
    โพสต์:
    1,425
    ค่าพลัง:
    +165
    โปรแกรมเบี้ยยังชีพใหม่บน Windows x64
    =========================
    ใช้ Visual Basic 2012 Ultimate (C++/CLI)
     
    แก้ไขครั้งล่าสุดโดยผู้ดูแล: 5 ตุลาคม 2014
  4. ledphong

    ledphong เป็นที่รู้จักกันดี

    วันที่สมัครสมาชิก:
    28 มีนาคม 2009
    โพสต์:
    1,425
    ค่าพลัง:
    +165
    ภาษา C++/CLI บน Visual Basic 2012 Ultimate เรียบง่ายกว่า Visual Basic 2010 Ultimate
     

    ไฟล์ที่แนบมา:

    • cpp1.png
      cpp1.png
      ขนาดไฟล์:
      134 KB
      เปิดดู:
      80
  5. ledphong

    ledphong เป็นที่รู้จักกันดี

    วันที่สมัครสมาชิก:
    28 มีนาคม 2009
    โพสต์:
    1,425
    ค่าพลัง:
    +165
    ปัญหาการเขียน C#.NET กับ C++/CLI
    =========================
    อยู่ที่ ปุ่ม btnRefresh กับ ปุ่ม btnUpdate เท่านั้นทำไมหรือครับ...คำตอบ
    ตอนคลิ๊กปุ่ม btnGenID ได้ค่าแล้วออกมากด btnRefresh พอกับเข้ามาคลิ๊กปุ่ม btnSearch อีกรอบพอกลับเข้าไป กดปุ่ม btnUpdate กับ Update ข้อมูลไม่ได้
    =========================
    โปรแกรมเมอร์มือใหม่หากไม่ระมัดระวังตรงจุดนี้คงเสียหายน่าดูครับ
     

    ไฟล์ที่แนบมา:

  6. ledphong

    ledphong เป็นที่รู้จักกันดี

    วันที่สมัครสมาชิก:
    28 มีนาคม 2009
    โพสต์:
    1,425
    ค่าพลัง:
    +165
    แล้ว Code ของ C++/CLI แข็งแรงมากกว่า C#.NET จริงหรือไม่ประการใดมีคำตอบ
    ==========================================
    หากเขียน ปุ่มคำสั่ง btnRefresh เป็น
    และเขียน ปุ่มคำสั่ง btnUpdate เป็น

    =====================
    เช่น ตัวอย่าง
    โปรแกรมนี้จะตัด cnn->Close();ไว้รอครับ กัน การ Error (เสมือน VB 6.0 คำสั่ง On Error Resume Next)
     

    ไฟล์ที่แนบมา:

    แก้ไขครั้งล่าสุดโดยผู้ดูแล: 21 ตุลาคม 2014
  7. ledphong

    ledphong เป็นที่รู้จักกันดี

    วันที่สมัครสมาชิก:
    28 มีนาคม 2009
    โพสต์:
    1,425
    ค่าพลัง:
    +165
    จุดแตกต่างของ C#.NET กับ C++/CLI อยู่ที่การแสดงผล ด้วย listView ทำไมหรือ
    ===========================================
    หากไม่ระมัดระวัง C++/CLI จะทำการ Copy ตัวเองให้ปรากฎบน listView อย่างท่วมท้น
    ================================
    ตัวอย่าง C#.NET
    ================================
    ตัวอย่าง C++/CLI

    หากไม่ควบคุม listView1->Items->Clear(); มันจะทำการ Copy ตัวเองตอนคลิ๊กปุ่ม Refresh ไปเรื่อย ๆ ครับ
     

    ไฟล์ที่แนบมา:

    • listViewCS.png
      listViewCS.png
      ขนาดไฟล์:
      146.1 KB
      เปิดดู:
      62
    • listViewCPP.png
      listViewCPP.png
      ขนาดไฟล์:
      159.3 KB
      เปิดดู:
      54
  8. ledphong

    ledphong เป็นที่รู้จักกันดี

    วันที่สมัครสมาชิก:
    28 มีนาคม 2009
    โพสต์:
    1,425
    ค่าพลัง:
    +165
    ประการสุดท้าย การกำหนดชนิดของฐานข้อมูลเป็น text ล้วน ๆ ดีหรือไม่
    ====================================
    ดีเป็นบางอย่าง เช่น
    btnAdd ไม่พบ Error ทั้ง C#.NET และ C++/CLI
    btnUpdate หรือ btnEdit พบ Error ใน C#.NET และ ไม่พบ Error ใน C++/CLI
    btnDelete ไม่พบ Error ทั้ง C#.NET และ C++/CLI
    =============================
    แล้วทำไมมันมาเจอปัญหาใน btnUpdate ล่ะ เพราะว่า C#.NET วอรี่ในชนิดของฐานข้อมูล
     

    ไฟล์ที่แนบมา:

    • dbAccess.png
      dbAccess.png
      ขนาดไฟล์:
      158.8 KB
      เปิดดู:
      50
  9. ledphong

    ledphong เป็นที่รู้จักกันดี

    วันที่สมัครสมาชิก:
    28 มีนาคม 2009
    โพสต์:
    1,425
    ค่าพลัง:
    +165
    การแก้ไขบักของ C#.NET ตอนใช้ menuStrip1
    ============================
    ดูรูปครับ

    ส่วน C++/CLI ปกติไม่มีปัญหาบักอะไรครับ
     

    ไฟล์ที่แนบมา:

  10. ledphong

    ledphong เป็นที่รู้จักกันดี

    วันที่สมัครสมาชิก:
    28 มีนาคม 2009
    โพสต์:
    1,425
    ค่าพลัง:
    +165
    ปัญหาเรื่องปวดหัวเรื่องของเวลา ระหว่างโชว์ พ.ศ. กับ โชว์ ค.ศ.
    ================================
    หากใช้ Text ในฐานข้อมูลไม่มีปัญหาอะไรครับ หากใช้ DateTime ปวดหัวแน่ ๆ
    ================================
    C#.NET ขึ้นโชว์ใน listView ได้ พ.ศ.ตรง
    C++/CLI ขึ้นโชว์ใน listView ได้ ค.ศ. (ต้องแปลงค่าเอาครับ)
     
  11. ledphong

    ledphong เป็นที่รู้จักกันดี

    วันที่สมัครสมาชิก:
    28 มีนาคม 2009
    โพสต์:
    1,425
    ค่าพลัง:
    +165
    C++/CLI บน Visual Studio 2010 Ultimate และ Visual Basic 2012 Ultimate แตกต่างกันมากไหม
    ================================
    ส่วนแรก VB 2012 ใช้ .NET 4.5 เขียน
    และการออก Excel ใน VB 2012 มีขีดเส้นทึบไว้ (เหมือนจะ Error แต้ก็ผ่านไปได้)
     

    ไฟล์ที่แนบมา:

    • InteropCPP.png
      InteropCPP.png
      ขนาดไฟล์:
      158.2 KB
      เปิดดู:
      65
  12. ledphong

    ledphong เป็นที่รู้จักกันดี

    วันที่สมัครสมาชิก:
    28 มีนาคม 2009
    โพสต์:
    1,425
    ค่าพลัง:
    +165
    ตอนต่อไป เขียน C#.NET แบบไม่มี Error แข็งแรงสุดๆ
    และเขียน C++/CLI แบบไม่มี Error แข็งแรงสุดๆ
     
  13. ledphong

    ledphong เป็นที่รู้จักกันดี

    วันที่สมัครสมาชิก:
    28 มีนาคม 2009
    โพสต์:
    1,425
    ค่าพลัง:
    +165
    ปัญหา SQL Server 2008 R2
    ======================
    Select convert(varchar,dataadd(year,543,Birthdate),103) As BirthDay
    ======================
    ปกติจะใช้คำสั่งนี้ได้ต้องกำหนดเป็น date หรือ datetime หรือ datetime2(7) หรือ datetimeoffset(7) ในฐานข้อมูล SQL Server 2008 R2 เท่านั้น หากไปตั้งเป็น smalldatetime หมดสิทธิ์การใช้คำสั่ง Select convert(varchar,dataadd(year,543,Birthdate),103) As BirthDay ทำไมหรือครับลองทดสอบดูครับจะรู้เองครับ
     
    แก้ไขครั้งล่าสุดโดยผู้ดูแล: 16 พฤศจิกายน 2014
  14. ledphong

    ledphong เป็นที่รู้จักกันดี

    วันที่สมัครสมาชิก:
    28 มีนาคม 2009
    โพสต์:
    1,425
    ค่าพลัง:
    +165
    ข้อควรรู้ของ SQL Server DataBase 2008R2
    =========================
    DateTime ข้อจำกัด 1/1/1753-12/31/9999
    money ข้อจำกัด -2^63 - 2^63
     
  15. ledphong

    ledphong เป็นที่รู้จักกันดี

    วันที่สมัครสมาชิก:
    28 มีนาคม 2009
    โพสต์:
    1,425
    ค่าพลัง:
    +165
    วิวัฒนาการ SQL Server
     

    ไฟล์ที่แนบมา:

  16. ledphong

    ledphong เป็นที่รู้จักกันดี

    วันที่สมัครสมาชิก:
    28 มีนาคม 2009
    โพสต์:
    1,425
    ค่าพลัง:
    +165
    C++/CLI Connection SQL Server 2008R2 ?
    ==========================
    ได้แต่ก็ต้องใช้ C#.NET ช่วย
    โดย Copy ฐานข้อมูลจากการสร้าง Database .mdf มาวางไว้ใน Folder C++/CLI เท่านั้นครับ
     

    ไฟล์ที่แนบมา:

    • CPP1.png
      CPP1.png
      ขนาดไฟล์:
      31.4 KB
      เปิดดู:
      76
    แก้ไขครั้งล่าสุดโดยผู้ดูแล: 28 พฤศจิกายน 2014
  17. ledphong

    ledphong เป็นที่รู้จักกันดี

    วันที่สมัครสมาชิก:
    28 มีนาคม 2009
    โพสต์:
    1,425
    ค่าพลัง:
    +165
    Connection SQL Server 2008R2 บน C++/CLI
    ===========================
    ตัวอย่างปุ่ม GenID Auto
    ===========================
    private: System::Void btnGenID_Click(System::Object^ sender, System::EventArgs^ e) {
    int a;
    String ^strConn = "Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirectory|\\dbLeave.mdf;Integrated Security=True;User Instance=True";
    SqlConnection ^con = gcnew SqlConnection(strConn);
    con->Open();

    String ^query = "Select Max(CodePK) from tblLeave";
    SqlCommand ^cmd = gcnew SqlCommand(query, con);
    SqlDataReader ^dr = cmd->ExecuteReader();
    if (dr->Read())
    {
    String ^val = dr[0]->ToString();
    if (val == "")
    {
    txtCodePK->Text = "1";
    txtCodeID->Text = "0000001";
    }
    else
    {
    a = Convert::ToInt32(dr[0]->ToString());
    a = a + 1;
    txtCodePK->Text = a.ToString();
    txtCodeID->Text = a.ToString()->PadLeft(7, '0');
    }
    }
    //=============Close Button==================
    btnGenID->Enabled = false;//ปิดปุ่ม btnGenID
    btnEdit->Enabled = false;//ปิดปุ่ม btnEdit
    btnDelete->Enabled = false;////ปิดปุ่ม btnDelete
    btnSearch->Enabled = false;////ปิดปุ่ม btnSearch
    txtSearch->ReadOnly = true;
    txtCodePK->ReadOnly = true;
    txtCodeID->ReadOnly = true;
    //===========================================
    }
     

    ไฟล์ที่แนบมา:

    • CPP2.png
      CPP2.png
      ขนาดไฟล์:
      24 KB
      เปิดดู:
      83
    • CPP3.png
      CPP3.png
      ขนาดไฟล์:
      18.7 KB
      เปิดดู:
      64
  18. ledphong

    ledphong เป็นที่รู้จักกันดี

    วันที่สมัครสมาชิก:
    28 มีนาคม 2009
    โพสต์:
    1,425
    ค่าพลัง:
    +165
    รูปแบบคำสั่งของการสร้าง AutoID หรือ GenID ให้กับ DataBase
     

    ไฟล์ที่แนบมา:

    • CPP3.png
      CPP3.png
      ขนาดไฟล์:
      18.7 KB
      เปิดดู:
      62
  19. ledphong

    ledphong เป็นที่รู้จักกันดี

    วันที่สมัครสมาชิก:
    28 มีนาคม 2009
    โพสต์:
    1,425
    ค่าพลัง:
    +165
    AutoID ของ C#.NET บน SQL Server 2008
    =========================
    private void btnGenID_Click(object sender, EventArgs e)
    {
    sql = @"SELECT Max(CodePK) FROM tblOlder ";//อย่าใช้ Count เป็นอันขาดเพราะจะได้ค่าถอยหลังซ้ำกันไปเรื่อย ๆ ครับ
    command = new SqlCommand(sql, connection);

    //============Auto GenID New=================
    object MaxID = command.ExecuteScalar();

    if (MaxID.ToString() == String.Empty)
    {
    txtCodePK.Text = "1";
    txtCodeID.Text = "0000001";
    }
    else
    {
    string sql2 = @"SELECT Max(CodePK)+1 FROM tblOlder ";//อย่าใช้ Count เป็นอันขาดเพราะจะได้ค่าถอยหลังซ้ำกันไปเรื่อย ๆ ครับ
    command = new SqlCommand(sql2, connection);

    //Int32 MaxNO = (Int32)cmd.ExecuteScalar();//ทำแบบนี้ Error อย่างเดียว
    object MaxNO = command.ExecuteScalar();
    txtCodePK.Text = MaxNO.ToString();//ค่าสูงสุด
    txtCodeID.Text = MaxNO.ToString().PadLeft(7, '0');
    }
    //=============Close Button==================
    btnGenID.Enabled = false;//ปิดปุ่ม btnGenID
    buttonDelete.Enabled = false;////ปิดปุ่ม buttonDelete
    //===========================================
    }
     
  20. ledphong

    ledphong เป็นที่รู้จักกันดี

    วันที่สมัครสมาชิก:
    28 มีนาคม 2009
    โพสต์:
    1,425
    ค่าพลัง:
    +165
    AutoID ของ C#.NET บน MS Access 2003
    ========================
    OleDbConnection cnn;
    OleDbDataAdapter da;
    OleDbCommand cmd;
    DataSet ds;

    private void btnGenID_Click(object sender, EventArgs e)
    {
    //===========Auto GenID New==================
    cnn = new OleDbConnection("provider=Microsoft.Jet.Oledb.4.0;data source=" + Application.StartupPath + "\\dbPay.mdb;");
    cnn.Open();
    string sql = @"SELECT Max(CodePK) FROM tblPay ";//อย่าใช้ Count เป็นอันขาดเพราะจะได้ค่าถอยหลังซ้ำกันไปเรื่อย ๆ ครับ
    cmd = new OleDbCommand(sql, cnn);

    object MaxID = cmd.ExecuteScalar();

    if (MaxID.ToString() == String.Empty)
    {
    txtCodePK.Text = "1";
    txtCodeID.Text = "0000001";
    }
    else
    {
    string sql2 = @"SELECT Max(CodePK)+1 FROM tblPay ";//อย่าใช้ Count เป็นอันขาดเพราะจะได้ค่าถอยหลังซ้ำกันไปเรื่อย ๆ ครับ
    cmd = new OleDbCommand(sql2, cnn);

    //Int32 MaxNO = (Int32)cmd.ExecuteScalar();//ทำแบบนี้ Error อย่างเดียว
    object MaxNO = cmd.ExecuteScalar();
    txtCodePK.Text = MaxNO.ToString();//ค่าสูงสุด
    txtCodeID.Text = MaxNO.ToString().PadLeft(7, '0');
    }
    //=============Close Button==================
    btnGenID.Enabled = false;//ปิดปุ่ม btnGenID
    btnEdit.Enabled = false;//ปิดปุ่ม btnEdit
    btnDelete.Enabled = false;////ปิดปุ่ม btnDelete
    btnSearch.Enabled = false;////ปิดปุ่ม btnSearch
    txtSearch.ReadOnly = true;
    txtCodePK.ReadOnly = true;
    txtCodeID.ReadOnly = true;
    //===========================================
    }
     

แชร์หน้านี้

Loading...