更新 INNER JOIN WHERE 条件
UPDATE INNER JOIN WHERE Condition
我无法继续我的下一个任务,我的问题是我不知道如何将我的 DGV 的 returned 值与 TABLE.
匹配
这就是我用 value/display 成员加载组合框的方式:
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();
这是我的 "Receiving an Order" 更新代码:
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 Load/Refresh:
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 只会 return 字符串或 "Product" 的名称。
这是我的完整产品 Table
Table HERE
Window表单设计Form
自从我上次处理此类应用程序以来已经有一段时间了,如果有不完全正确的地方,我深表歉意...
当然会返回 ProductName,因为 dgvCategory.SelectedCells[1]
是该行的第二个单元格,这对应于查询中的第二个字段,即 ProductName
。您需要做一些修改:
同时获取 ID
列,例如:
SELECT Product.ID as pid, Supplier, ...
并将其添加到您的数据中table(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);
请注意,我无法测试以上任何一项,因此您可能需要做一些研究。
我无法继续我的下一个任务,我的问题是我不知道如何将我的 DGV 的 returned 值与 TABLE.
匹配这就是我用 value/display 成员加载组合框的方式:
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();
这是我的 "Receiving an Order" 更新代码:
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 Load/Refresh:
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 只会 return 字符串或 "Product" 的名称。
这是我的完整产品 Table Table HERE
Window表单设计Form
自从我上次处理此类应用程序以来已经有一段时间了,如果有不完全正确的地方,我深表歉意...
当然会返回 ProductName,因为 dgvCategory.SelectedCells[1]
是该行的第二个单元格,这对应于查询中的第二个字段,即 ProductName
。您需要做一些修改:
同时获取 ID
列,例如:
SELECT Product.ID as pid, Supplier, ...
并将其添加到您的数据中table(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);
请注意,我无法测试以上任何一项,因此您可能需要做一些研究。