在ASP.NET中使用时,SqlCommand不会更新和删除数据库

时间:2017-04-14 06:25:09

标签: c# sql-server sqlcommand

使用ASP.NET Web表单时,我在数据库中遇到UPDATEDELETE数据时遇到问题,代码与Windows表单配合得很好,所以我不知道我做错了什么。代码假设使用新编辑的数据更新Gridview,但是当我单击编辑按钮时,gridview和数据表都没有发生。

这只是一项没有安全要求的练习,所以我只想知道如何让它先工作。

protected void Edit_btn_Click(object sender, EventArgs e)
{
        if (sqlCon.State == ConnectionState.Closed)
        {
            sqlCon.Open();
        }

        SqlCommand command = new SqlCommand();
        command.Connection = sqlCon;

        command.CommandText = ("UPDATE WareHouse SET [Name] = '" + Name_Field.Text + "' WHERE [Number] = '" + selectedName + "'");
        command.ExecuteNonQuery();

        command.CommandText = ("UPDATE WareHouse SET [Number] = '" + Number_Field.Text + "' WHERE [Number] = '" + selectedName + "'");
        command.ExecuteNonQuery();

        command.CommandText = ("UPDATE WareHouse SET [Storage] = '" + Storage_Field.Text + "' WHERE [Number] = '" + selectedName + "'");
        command.ExecuteNonQuery();

        command.CommandText = ("UPDATE WareHouse SET [Shelf] = '" + Shelf_Field.Text + "' WHERE [Number] = '" + selectedName + "'");
        command.ExecuteNonQuery();

        command.CommandText = ("UPDATE WareHouse SET [Brand] = '" + Brand_Field.Text + "' WHERE [Number] = '" + selectedName + "'");
        command.ExecuteNonQuery();

        SqlDataAdapter ad = new SqlDataAdapter("SELECT * FROM WareHouse", sqlCon);
        DataTable ds = new DataTable();
        ad.Fill(ds);                    // Fill t with data from Adapter a

        GridView1.DataSource = ds; // Get data from Source t 
        GridView1.DataBind();
    }

和删除数据

    protected void Remove_btn_Click(object sender, EventArgs e)
    {
        if (sqlCon.State == ConnectionState.Closed)
        {
            sqlCon.Open();
        }

        SqlCommand command = new SqlCommand();
        command.Connection = sqlCon;
        command.CommandText = "DELETE FROM WareHouse WHERE [Name] = '" + Name_Field.Text + "' AND [Number] = '" + selectedNumber + "' AND [Storage] = '" + selectedStorage + "' AND [Shelf] = '" + selectedShelf + "' AND [Brand] = '" + selectedBrand + "'";
        command.ExecuteNonQuery();

        clear();
        showData();
    }

除了这两个功能之外,还有另外两个从数据库添加和搜索也使用SqlCommand并且它们正常工作没有问题。我的查询有问题吗?

2 个答案:

答案 0 :(得分:0)

存储,货架和品牌不会更新,因为您要更新[Number]以获取Number_Field.Text的值,然后与where子句中的selectedName进行比较。

通过参数将所有这些SQL代码放在SP中并从ASP.Net代码中调用它将对您有所帮助。

答案 1 :(得分:0)

好的。我在学习ASP.NET时也遇到过这个问题。 但我有一点不同的环境。 我有一个数据网格,数据网格内容中的任何更新都应该在点击更新按钮后反映在数据库表中。

所以我在下面的查询中填充网格。

Try
        Dim UpperCase As String = UCase(HostnameTextBox.Text)

        Dim sql As String = "select * from HOST_DETAILS where upper(HOSTNAME) like '%" + UpperCase + "%'"
        da = New OracleDataAdapter(sql, conn)
        ds.Clear()
        da.Fill(ds, "TEST")
        DataGridView1.DataSource = ds.Tables(0)
    Catch ex As Exception
        MessageBox.Show(ex.Message.ToString())
    End Try

以下一个更新按钮上的表单击。

conn.Open()

    Try
        Dim ocb As New OracleCommandBuilder
        ocb = New OracleCommandBuilder(da)
        da.Update(ds, "TEST")
        MessageBox.Show("Information Updated")
    Catch ex As Exception
        MessageBox.Show(ex.Message.ToString())


    End Try
    conn.Close()

还要确保DataAdapter da是全局的,并且在公共类之后定义,因此可以从两者访问它。

   Dim da As New OracleDataAdapter

希望这有帮助。