如何在 winform C# 中将连接字符串更改为实体并在 winform 代码中更改连接


     `i have this code how can change the connection sql to Entity like NorthwindEntity`

```
> using System;
   using System.Collections.Generic;
   using System.ComponentModel;
   using System.Drawing;
   using System.Data;
   using System.Linq;
   using System.Text;
   using System.Threading.Tasks;
   using System.Windows.Forms;

   namespace Attendance_Management_System.PAL.User_Control
{
    public partial class UserControlAttendance : UserControl
    {
        private string sql = @"Data Source = .\SQLEXPRESS;
                            Initial Catalog = Attendance_Management_System;
                            Integrated Security = True;";
        private bool okay;

        public UserControlAttendance()
        {
            InitializeComponent();
            dataGridViewMarkAttendance.Columns["Column1"].Visible = false;
            dataGridViewMarkAttendance.Columns["Column5"].Visible = false;
        }

        private void comboBoxClass_SelectedIndexChanged(object sender, EventArgs e)
        {
            if(Attendance.Attendance.IsMarkAttendance(dateTimePickerDate.Text, comboBoxClass.SelectedItem.ToString(), sql))
            {
                Attendance.Attendance.DisplayAndSearchAllData("SELECT Student_Table.Student_ID, Student_Name, Student_Reg, Attendance_Status FROM Student_Table INNER JOIN Attendance_Table ON Student_Table.Student_ID = Attendance_Table.Student_ID INNER JOIN Class_Table ON Class_Table.Class_ID = Student_Table.Class_ID WHERE Attendance_Date = '" + dateTimePickerDate.Text + "' AND Class_Name = '" + comboBoxClass.SelectedItem.ToString() + "';", dataGridViewMarkAttendance, sql);
                okay = true;
            }
            else
            {
                Attendance.Attendance.DisplayAndSearchAllData("SELECT Student_ID, Student_Name, Student_Reg FROM Student_Table INNER JOIN Class_Table ON Class_Table.Class_ID = Student_Table.Class_ID WHERE Class_Name = '" + comboBoxClass.SelectedItem.ToString() + "';", dataGridViewMarkAttendance, sql);
                okay = false;
            }
        }

        private void tabPageMarkAttendance_Leave(object sender, EventArgs e)
        {
            if (comboBoxClass.SelectedIndex != -1)
            {
                if (comboBoxClass.SelectedIndex != -1)
                {
                    string status;
                    if (Attendance.Attendance.IsMarkAttendance(dateTimePickerDate.Text, comboBoxClass.SelectedItem.ToString(), sql))
                    {
                        foreach (DataGridViewRow row in dataGridViewMarkAttendance.Rows)
                        {
                            if (Convert.ToBoolean(row.Cells["Column4"].EditedFormattedValue) == true)
                                status = "Present";
                            else
                                status = "Absent";
                            Attendance.Attendance.UpdateAttendance(row.Cells["Column1"].Value.ToString(), dateTimePickerDate.Text, status, sql);
                        }
                    }
                    else
                    {
                        foreach (DataGridViewRow row in dataGridViewMarkAttendance.Rows)
                        {
                            if (Convert.ToBoolean(row.Cells["Column4"].EditedFormattedValue) == true)
                                status = "Present";
                            else
                                status = "Absent";
                            Attendance.Attendance.MarkAttendance(row.Cells["Column1"].Value.ToString(), dateTimePickerDate.Text, status, sql);
                        }
                    }
                }
            }
        }

        private void dataGridViewMarkAttendance_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {
            if (comboBoxClass.SelectedIndex != -1)
            {
                if (Attendance.Attendance.IsMarkAttendance(dateTimePickerDate.Text, comboBoxClass.SelectedItem.ToString(), sql) && okay)
                {
                    foreach (DataGridViewRow row in dataGridViewMarkAttendance.Rows)
                    {
                        if (row.Cells["Column5"].Value.ToString() == "Present")
                            row.Cells["Column4"].Value = true;
                        else
                            row.Cells["Column4"].Value = false;
                    }
                }
            }
        }

        private void comboBoxClass_Click(object sender, EventArgs e)
        {
            comboBoxClass.Items.Clear();
            Attendance.Attendance.FillComboBox("SELECT DISTINCT(Class_Name) FROM Class_Table;", comboBoxClass, sql);
        }
    }
}
```




     `i try this in combobox it,s working`

```
    using(Attendance_Management_SystemEntities db=new Attendance_Management_SystemEntities())
            {
                db.Configuration.ProxyCreationEnabled = false;
                comboBoxClass.DataSource = db.Class_Table.ToList();
                comboBoxClass.ValueMember = "Class_ID";
                comboBoxClass.DisplayMember = "Class_Name";
            }
```







`but in private void comboBoxClass_SelectedIndexChanged not find way to do it`

What I have tried:

i try this in 
<pre>private void ucAttendance_Load(object sender, EventArgs e)
        {
            using(Attendance_Management_SystemEntities db=new Attendance_Management_SystemEntities())
            {
                db.Configuration.ProxyCreationEnabled = false;
                comboBoxClass.DataSource = db.Class_Table.ToList();
                comboBoxClass.ValueMember = "Class_ID";
                comboBoxClass.DisplayMember = "Class_Name";
            }
        }

工作正常,但在组合框中无法工作数据库

private void comboBoxClass_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (Attendance.Attendance.IsMarkAttendance(dTPickerAttend.Text, comboBoxClass.SelectedItem.ToString(), ))
            {
                Attendance.Attendance.DisplayAndSearchAllData("SELECT Student_Table.Student_ID, Student_Name, Student_Reg, Attendance_Status FROM Student_Table INNER JOIN Attendance_Table ON Student_Table.Student_ID = Attendance_Table.Student_ID INNER JOIN Class_Table ON Class_Table.Class_ID = Student_Table.Class_ID WHERE Attendance_Date = '" + dTPickerAttend.Text + "' AND Class_Name = '" + comboBoxClass.SelectedItem.ToString() + "';", dataGridViewMarkAttendance, sql);
                //okay = true;
            }
            else
            {
                Attendance.Attendance.DisplayAndSearchAllData("SELECT Student_ID, Student_Name, Student_Reg FROM Student_Table INNER JOIN Class_Table ON Class_Table.Class_ID = Student_Table.Class_ID WHERE Class_Name = '" + comboBoxClass.SelectedItem.ToString() + "';", dataGridViewMarkAttendance, sql);
                //okay = false;
            }
        }

解决方案1

C#
private string sql = @"Data Source = .\SQLEXPRESS;
Initial Catalog = Attendance_Management_System;
Integrated Security = True;";

永远不要这样做:这称为“硬编码”,这意味着您必须在开发和生产之间更改应用程序源 – 这意味着您发布未经测试的代码。

相反,始终使用配置文件来存储此类内容:然后当您发布代码时,配置文件不会更改并且应该“正常工作”。 您可以使用 .NET 设置文件、使用 JSON 或 XML,或者手动编写自己的代码 – 但我的做法如下所示: 实例存储 – 在应用程序之间共享配置数据的简单方法[^] – 这对于您的应用程序来说可能有点大材小用,但它显示了一种管理它的方法。

コメント

タイトルとURLをコピーしました