C# 我只想更新数据库中文本框已启用的列,并保留已禁用的列的以前数据?

C# 我只想更新数据库中文本框已启用的列,并保留已禁用的列的以前数据?,c#,.net,visual-studio-2010,windows-applications,C#,.net,Visual Studio 2010,Windows Applications,()图像链接 请查看图片以了解问题的更多说明,因为我知道我无法向您更清楚地说明 我只想更新那些由用户通过复选框选中的列的数据,那些未选中的列不会被NULL值更新 我的想法是使用511 if…else为不同的更新查询分别设置条件,但这是不可能实现的 到目前为止,更新代码如下: else if(update_rdbtn.Checked) { FileStream fstream = new FileStream(this.imglocatio

()图像链接

请查看图片以了解问题的更多说明,因为我知道我无法向您更清楚地说明

我只想更新那些由用户通过复选框选中的列的数据,那些未选中的列不会被NULL值更新

我的想法是使用511 if…else为不同的更新查询分别设置条件,但这是不可能实现的

到目前为止,更新代码如下:

else if(update_rdbtn.Checked)
            {

                FileStream fstream = new FileStream(this.imglocation_lbl.Text, FileMode.Open, FileAccess.Read);
                BinaryReader br = new BinaryReader(fstream);
                imgbtarray = br.ReadBytes((int)fstream.Length);
                SqlConnection con = new SqlConnection("Data Source=JackSparrow-PC\\sqlexpress;Initial Catalog=HCE_DB;Integrated Security=True;Pooling=False");

                SqlCommand cmd = new SqlCommand("Update StudentInfo SET Rollno='" + this.rollno_txtbox.Text + "',Student_Name='" + this.studname_txtbox.Text + "',F_name='" + this.fname_txtbox.Text + "',D_O_B='" + this.dob_txtbox.Text + "',Address='" + this.address_txtbox.Text + "',Phone='" + this.phone_txtbox.Text + "',Valid_upto='" + this.validupto_txtbox.Text + "',Image=@IMG,Branch='" + this.branch_txtbox.Text + "' WHERE Rollno='" + this.rollno_txtbox.Text + "';", con);
                SqlDataReader myReader;
            try
            {
                con.Open();
                cmd.Parameters.Add(new SqlParameter("@IMG", imgbtarray));
                myReader = cmd.ExecuteReader();
                MessageBox.Show("Data has been updated");
                myReader.Close();
                con.Close();
            }

            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
已检查的无线电btn的代码已更改:

   private void update_rdbtn_CheckedChanged(object sender, EventArgs e)
    {
        update_grpbox.Enabled = true;
        studname_txtbox.Enabled = false;
        fname_txtbox.Enabled = false;
        dob_txtbox.Enabled = false;
        branch_txtbox.Enabled = false;
        address_txtbox.Enabled = false;
        phone_txtbox.Enabled = false;
        validupto_txtbox.Enabled = false;
        Browse_btn.Enabled = false;
        studname_chkbox.Checked = false;
        fname_chkbox.Checked = false;
        dob_chkbox.Checked = false;
        branch_chkbox.Checked = false;
        Address_chkbox.Checked = false;
        phone_chkbox.Checked = false;
        validupto_chkbox.Checked = false;
        Uploadimg_chkbox.Checked = false;
    }
复选框的代码:

 private void studname_chkbox_CheckedChanged(object sender, EventArgs e)
    {
        if (!studname_chkbox.Checked)
        {
            studname_txtbox.Enabled = false;
        }
        else
        {
            studname_txtbox.Enabled = true;
        }
    }

    private void fname_chkbox_CheckedChanged(object sender, EventArgs e)
    {
        if (!fname_chkbox.Checked)
        {
            fname_txtbox.Enabled = false;
        }
        else
        {
            fname_txtbox.Enabled = true;
        }
    }

    private void dob_chkbox_CheckedChanged(object sender, EventArgs e)
    {
        if (!dob_chkbox.Checked)
        {
            dob_txtbox.Enabled = false;
        }
        else
        {
            dob_txtbox.Enabled = true;
        }
    }

    private void branch_chkbox_CheckedChanged(object sender, EventArgs e)
    {
        if (!branch_chkbox.Checked)
        {
            branch_txtbox.Enabled = false;
        }
        else
        {
            branch_txtbox.Enabled = true;
        }
    }

    private void Address_chkbox_CheckedChanged(object sender, EventArgs e)
    {
        if (!Address_chkbox.Checked)
        {
            address_txtbox.Enabled = false;
        }
        else
        {
            address_txtbox.Enabled = true;
        }
    }

    private void phone_chkbox_CheckedChanged(object sender, EventArgs e)
    {
        if (!phone_chkbox.Checked)
        {
            phone_txtbox.Enabled = false;
        }
        else
        {
            phone_txtbox.Enabled = true;
        }
    }

    private void validupto_chkbox_CheckedChanged(object sender, EventArgs e)
    {
        if (!validupto_chkbox.Checked)
        {
            validupto_txtbox.Enabled = false;
        }
        else
        {
            validupto_txtbox.Enabled = true;
        }
    }

    private void Uploadimg_chkbox_CheckedChanged(object sender, EventArgs e)
    {
        if (!Uploadimg_chkbox.Checked)
        {
            Browse_btn.Enabled = false;
        }
        else
        {
            Browse_btn.Enabled = true;
        }
    }

好吧,我建议你改变,在datagrid中编辑,不在带有文本框的表单中。在datagridview中有一个名为“CellEndEdit”的事件,我认为它可以解决您的问题XX@Dietrich来回复,但我已经使用sqlreader解决了这个问题,在它被最新数据更新之前读取以前的数据,并将该数据存储到不同的字符串类型变量中,对于图像,我使用字节数组,如果(!sname\u chkbox.checked)使用它从存储的变量获取数据…否则使用用户输入更新数据我还有一个查询,即我在c#中开发了一个windows应用程序,其中包含两个表Admin和StudentInfo的HCE#U DB.mdf文件每当我单击一个按钮将数据存储到数据库中时,mycommand就会成功执行,并在我将数据加载到数据库时显示数据添加成功在datagridview中查看,它还显示了我添加的数据。但当我关闭应用程序并再次启动时,所有数据都丢失了。。。。请帮帮我