UPDATE INNER JOIN WHERE条件

时间:2017-02-27 15:56:36

标签: c# mysql sql where

我无法继续执行下一个任务,我的问题是我不知道如何将我的DGV的返回值与TABLE匹配。

这是我用值/显示成员加载我的组合框的方法:

SqlConnection con = new SqlConnection("Data Source=DESKTOP-5V9PS33\\SQLEXPRESS;Initial Catalog=Farmacia;Integrated Security=True");
con.Open();
SqlCommand sc = new SqlCommand("SELECT ID,ProductName FROM Product", con);
SqlDataReader reader;
reader = sc.ExecuteReader();
DataTable dt = new DataTable();
dt.Columns.Add("ID", typeof(int));
dt.Columns.Add("ProductName", typeof(string));
dt.Load(reader);
cmbProductName.ValueMember = "ID";
cmbProductName.DisplayMember = "ProductName";
cmbProductName.DataSource = dt;
cmbProductName.Text = "";

这是我从我的数据库和我的DGV中添加价值的方式:

sc.Parameters.AddWithValue("@SupplierID", cmbSupplier.SelectedValue.ToString());
sc.Parameters.AddWithValue("@ProductNameID", cmbProductName.SelectedValue.ToString());
sc.Parameters.AddWithValue("@Quantity",txtQuantity.Text);
sc.Parameters.AddWithValue("@UnitPrice", txtUnitPrice.Text);
sc.Parameters.AddWithValue("@Markup", txtMarkup.Text);
sc.Parameters.AddWithValue("@SellingPrice", txtSellingPrice.Text);
sc.ExecuteNonQuery();

这是我的代码"接收订单" UPDATE:

SqlConnection con = new SqlConnection("Data Source=DESKTOP-5V9PS33\\SQLEXPRESS;Initial Catalog=Farmacia;Integrated Security=True");
con.Open();
SqlCommand sc = new SqlCommand("DELETE From PurchaseOrder WHERE ProductNameID = '"+dgvCategory.SelectedCells[1].Value.ToString()+"'", con);
sc.ExecuteNonQuery();
MessageBox.Show("Received");

填充DGV加载/刷新:

private void frmPurchaseOrder_Load_1(object sender, EventArgs e)
{
    try
    {
        SqlConnection con = new SqlConnection("Data Source=DESKTOP-5V9PS33\\SQLEXPRESS;Initial Catalog=Farmacia;Integrated Security=True");
        con.Open();
        SqlCommand sc = new SqlCommand("SELECT Supplier,ProductName,PurchaseOrder.Quantity,PurchaseOrder.UnitPrice,PurchaseOrder.Markup,PurchaseOrder.SellingPrice FROM PurchaseOrder Inner Join Supplier ON Supplier.ID = PurchaseOrder.SupplierID Inner Join Product ON Product.ID = PurchaseOrder.ProductNameID", con);
        SqlDataReader reader;
        reader = sc.ExecuteReader();
        DataTable dt = new DataTable();
        dt.Columns.Add("Supplier", typeof(string));
        dt.Columns.Add("ProductName", typeof(string));
        dt.Columns.Add("Quantity", typeof(int));
        dt.Columns.Add("UnitPrice", typeof(float));
        dt.Columns.Add("Markup", typeof(float));
        dt.Columns.Add("SellingPrice", typeof(float));
        dt.Load(reader);

        for (int x = 0; x < dt.Rows.Count; x++)
        {
            string Supplier = dt.Rows[x].ItemArray[0].ToString();
            string ProductName = dt.Rows[x].ItemArray[1].ToString();
            string Quantity = dt.Rows[x].ItemArray[2].ToString();
            string UnitPrice = dt.Rows[x].ItemArray[3].ToString();
            string Markup = dt.Rows[x].ItemArray[4].ToString();
            string SellingPrice = dt.Rows[x].ItemArray[5].ToString();
            string[] row = { Supplier, ProductName, Quantity, UnitPrice, Markup, SellingPrice };
            dgvCategory.Rows.Add(row);
        }
        con.Close();
    }
    catch (SystemException ex)
    {
        MessageBox.Show(ex.ToString());
    }
}

我的DGV只会返回&#34;产品&#34;。

的字符串或名称

这是我的FullProduct表 Table HERE

窗口表单设计Form

1 个答案:

答案 0 :(得分:1)

自从我上次处理此类应用程序以来已经有一段时间了,如果有些事情不完全正确,我会道歉......

当然返回ProductName,因为dgvCategory.SelectedCells[1]是行的第二个单元格,这对应于查询中的第二个字段ProductName。你需要做一些修改:

也可以获取ID列,例如:

SELECT Product.ID as pid, Supplier, ...

并将其添加到您的数据表中(pid是我在上面选择的别名):

dt.Columns.Add("pid", typeof(int));

然后将“d”值添加为数据行的标记:

row.Tag = dt["pid"].value;
dgvCategory.Rows.Add(row);

最后,您可以使用此ID(在行上保存为Tag):

SqlCommand sc = new SqlCommand("DELETE From PurchaseOrder WHERE ProductNameID = '"+dgvCategory.SelectedCells[1].RowIndex.Tag.ToString()+"'", con);

请注意,我无法测试上述任何一项,因此您可能需要做一些研究。