使用sql tableadapters更新数据库C#

时间:2016-03-28 15:52:53

标签: c# sql-server database

我正在为一群朋友和我自己构建一个应用程序,用于DnD会话。该程序的一部分涉及获取为字符,项目等输入的所有值并将它们存储到数据库中。我已经建立了数据库,并从数据库中拉入程序,但是我无法将数据返回到数据库。我有数据进入数据集,我的所有编辑都影响了数据集,但我无法得到任何影响实际源数据库表的内容。

下面我有一个按钮,我打算用它来更新字符中的项目'包。我同时包含了dataadapter和tableadapter方法。

 private void btnaddpack_Click(object sender, EventArgs e)
    {
        if (txtbxpack.Text != "")
        {
            /*connection.Open();
            SqlCommand cmd = new SqlCommand();
            cmd.CommandText = "UPDATE Pack SET Item = (@ItemName)" + "WHERE Id = '" + this.lstpack.SelectedValue + "';";
            cmd.ExecuteNonQuery();
            cmd.Clone();*/

            string packitem = txtbxpack.Text;    //will take item from an textbox
            this.packTableAdapter.Insert(packitem);

            this.Validate();
            this.packBindingSource.EndEdit();
            this.packTableAdapter.Update(this.dnD_MachineDataSet.Pack);
        }


        PopulatePack();

以下是我的填充代码,以防有人需要:

private void PopulatePack()
    {
        using (connection = new SqlConnection(connectionString))    //this is all about opening the connection to the sqldatabase, normally it would need to be closed, but this uses idisposable, so it will close itself
        using (SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM Pack", connection))
        {


            DataTable packtable = new DataTable();
            adapter.Fill(packtable);

            lstpack.DataSource = packtable;
            lstpack.DisplayMember = "Item";
            lstpack.ValueMember = "Id";

        }


    }

如上所述,每当我重新填充绘制数据集的列表框时,所有更改都会出现,因此为什么这是尝试将数据重新放回源数据库的问题。我将强制要求使用数据库和#34;声明,假装我是专家是没有用的。

感谢。

1 个答案:

答案 0 :(得分:0)

在评论代码中,您需要执行以下操作:

  1. 将连接对象分配给SqlCommand对象的Connection 属性
  2. 将项目名称传递给您的@ItemName参数
  3. 将参数值分配给WHERE子句中的“Id”列
  4. remove,'cmd.Clone();',并替换为'connection.Close();'
  5. 以下是代码的样子:

    connection.Open();
    SqlCommand cmd = new SqlCommand();
    cmd.Connection = connection;
    cmd.CommandText = "UPDATE Pack SET Item = (@ItemName) WHERE Id = @ID;";
    cmd.CommandType = CommandType.Text;
    cmd.Parameters.AddWithValue("@ItemName", txtbxpack.Text);
    cmd.Parameters.AddWithValue("@ID", this.lstpack.SelectedValue);
    cmd.ExecuteNonQuery();
    connection.Close();