Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 编辑数据表并将其发送回数据库_C# - Fatal编程技术网

C# 编辑数据表并将其发送回数据库

C# 编辑数据表并将其发送回数据库,c#,C#,在我的程序中,我有一个数据表,其中包含从数据库中获取的记录。这将显示在datagrid视图中,单击单元格时,它会将所有值加载到文本框中。单击保存按钮后,它将文本框值保存回数据表。但是,如何将此数据表发送回数据库并让其更新记录 以下是我加载记录的代码: indexRow = e.RowIndex; DataGridViewRow row = dgv_ReturnSearch.Rows[indexRow]; tb_editFirstName.Text = row.

在我的程序中,我有一个数据表,其中包含从数据库中获取的记录。这将显示在datagrid视图中,单击单元格时,它会将所有值加载到文本框中。单击保存按钮后,它将文本框值保存回数据表。但是,如何将此数据表发送回数据库并让其更新记录

以下是我加载记录的代码:

 indexRow = e.RowIndex;
        DataGridViewRow row = dgv_ReturnSearch.Rows[indexRow];

        tb_editFirstName.Text = row.Cells[1].Value.ToString();
        tb_editLastName.Text = row.Cells[2].Value.ToString();
        tb_editAge.Text = row.Cells[3].Value.ToString();
        tb_editPostCode.Text = row.Cells[4].Value.ToString();
        tb_editMobNum.Text = row.Cells[5].Value.ToString();
        tb_editEmail.Text = row.Cells[6].Value.ToString();
        tb_editAllergies.Text = row.Cells[7].Value.ToString();
        tb_editDOB.Text = row.Cells[8].Value.ToString();
        tb_editGender.Text = row.Cells[9].Value.ToString();
这是我保存它们的代码

DataGridViewRow newDataRow = dgv_ReturnSearch.Rows[indexRow];
            newDataRow.Cells[1].Value = tb_editFirstName.Text;
            newDataRow.Cells[2].Value = tb_editLastName.Text;
            newDataRow.Cells[3].Value = tb_editAge.Text;
            newDataRow.Cells[4].Value = tb_editPostCode.Text;
            Logic.SQLQueriesUtility.Adapter.Update(dt);
但是,这实际上并不更新数据库,只更新本地数据表。再次加载时,所有更改都会恢复


感谢从数据库加载
gridview
数据,您需要使用
DataTable
DataAdapter
然后绑定网格。它应该是这样的:

private void CustomersBindGrid()
{
    using (SqlConnection con = new SqlConnection(mycon))
    {
        using (SqlCommand cmd = new SqlCommand())
        {
            cmd.CommandText = "SELECT * FROM Customers";
            cmd.Connection = con;

            DataTable dt = new DataTable();
            using (SqlDataAdapter sda = new SqlDataAdapter(cmd))
            {
                sda.Fill(dt);
                Gridview1.DataSource = dt;
                Gridview1.DataBind();
            }
        }
        con.Close();
    }
}
尝试直接更新数据库:

private void SaveEdits_Click()
{
 using (SqlConnection con = new SqlConnection(mycon))
        {
            con.Open();
            using (SqlCommand cmd = new SqlCommand())
            {
                cmd.CommandText = "UPDATE Customers set firstname= @FN , lastname= @LN , age = @AG , postcode= @PC where CustomerID = @CustID";
                cmd.Connection = con;

                cmd.Parameters.AddWithValue("@CustID", cid);
                cmd.Parameters.AddWithValue("@FN", tb_editFirstName.Text);
                cmd.Parameters.AddWithValue("@LN", tb_editLastName.Text);
                cmd.Parameters.AddWithValue("@AG", tb_editAge.Text);
                cmd.Parameters.AddWithValue("@PC", tb_editPostCode.Text);

                cmd.ExecuteNonQuery();
            }
        }
        CustomersBindGrid();
        MessageBox.show("Information Updated!");
   }
}

您需要将此更新命令编辑到数据库中的列中,并获得一种读取客户id的方法,以便条件实际起作用并更新数据库

在你的帖子中,你不会写你的客户是如何发展的…
通常,这将通过SQL更新命令完成。
因此(在Microsoft universe中)可以使用SqlClient(System.Data.SqlClient命名空间)。
用户按“保存”按钮后,您将立即替换相关的textbox.text变量值,必要时更改数据类型,生成SQL更新字符串以更新SQL server上的数据。 SQL更新字符串示例:

Update TableName set ColumnName1Text = 'some text', ColumName2Integer = 12, ColumnName.... = ... where ColumnNameKey = KeyToDatatable
然后通过SqlClient(SqlCommand)将SQL命令(SQL更新字符串)提交给SQL server。
但是,因此您需要where子句的唯一键(在示例KeyToDatatable中),以便仅更新具有该键的行。

通常从DataTable(以及其他字段)查询键以显示数据(在您的网格中),然后转到update命令(可以对用户“隐藏”,用户不必知道键)。

我通过执行以下操作来修复它:

DataGridViewRow newDataRow = dgv_ReturnSearch.Rows[indexRow];
            dt.Rows[indexRow]["first_name"] = tb_editFirstName.Text;
            dt.Rows[indexRow]["last_name"] = tb_editLastName.Text;
            dt.Rows[indexRow]["age"] = tb_editAge.Text;
            dt.Rows[indexRow]["postcode"] = tb_editPostCode.Text;
            dt.Rows[indexRow]["mobile_num"] = tb_editMobNum.Text;
            dt.Rows[indexRow]["email"] = tb_editEmail.Text;
            dt.Rows[indexRow]["allergies"] = tb_editAllergies.Text;
            dt.Rows[indexRow]["DOB"] = tb_editDOB.Text;
            dt.Rows[indexRow]["gender"] = tb_editGender.Text;
            Logic.SQLQueriesUtility.Adapter.Update(dt);

与我以前所做的不同,现在它可以完美地工作,任何更改都会保存回数据库。

不起作用如何?抛出错误?不更新吗?添加咖啡?啊,是的,对不起,编辑了主要帖子以使其更清晰。如果您使用的是
DataTable
,那么您需要使用
DataAdapter
(和
DataSet
)以使用ADO.NET中的双向数据支持,但是请注意
DataTable
(以及相关的“强类型数据集”)从.NETFramework 1。x的范例日期,并被.NET 3.5中的高级实体框架替换,因此如果这是一个新项目,请考虑切换到EF。您可以为加载和保存发布完整代码吗?加载/保存时是否使用sql命令绑定网格?这是加载和保存的所有代码,这里只有将datagrid绑定到datatable的代码:
dt.Clear();customerSQL.SearchAllCustomer();Logic.SQLQueriesUtility.Adapter.Fill(dt);dgv_ReturnSearch.DataSource=dt;dt.AcceptChanges()这里是SQL语句
SELECT*fromcustomer\u info是的,我就是这么做的,但我想我的代码中不清楚,因为有一个单独的类运行SQL。数据表加载良好,如果我在数据网格视图中编辑单元格,然后运行update命令,它将在数据库中正确更新它们,但是,当我尝试使用文本编辑行时,它不会boxes@SamSims文本框位于gridview内部或分开,您想从gridview外部的文本框更新gridview行吗?是的,像这样的问题是当我使用dt.update将datatable推回数据库时。它不会更新新值,即使它们在datagrid中发生更改view@SamSims如果有帮助,请告诉我