sql server - c# (ADO.NET)传递变量作为构造函数参数

本文关键字:变量 参数 构造函数 server NET ADO sql | 更新日期: 2023-09-27 17:49:24

我有2个表单,类别和产品,它们连接到一个数据源(数据库)。

这个想法是,我希望应用程序首先加载表单类别,它显示有关现有类别的一些信息。

当我点击按钮产品时,产品表单应该出现,在类别表单

中显示当前选择的类别名称和ID的产品

我几乎已经完成了工作,但是我被困在如何将类别表单的类别id和名称的值传递给产品表单中的值,然后显示相应的数据,

到目前为止,我创建了一个字符串变量,它接受类别文本框的值textbox.text,然后我在products 表单中创建了一个类别表单的对象

然后我编写了以下代码,它连接到数据库,并从id等于类别表单id的表"products"中选择数据:

Categories cat = new Categories();
SqlCeConnection con = new SqlCeConnection("Data Source = Northwind40.sdf");
SqlCeDataAdapter da = new SqlCeDataAdapter("select * from products where [Category ID] = '" + cat.currID + "'", con);
DataSet ds = new DataSet();
da.Fill(ds, "Products");
BindingSource bs = new BindingSource(ds, "Products");
this.productsBindingSource = bs;

但这段代码只显示了一个结果,即所选类别id

的第一个产品

那么我该怎么做呢?

sql server - c# (ADO.NET)传递变量作为构造函数参数

这里的问题是您没有使用正确的Categories表单实例。您已经创建了一个新实例,其中没有用户选择的任何ID值。

一种方法是使用Product形式的参数化构造函数。然后,在Category表单中的Product按钮的按钮单击事件上:

Product productForm = new ProductForm("send selected values here");

在Product表单构造函数中,

string _selectedValues;
private Product(){
// Code here
}
public Product(string selectedValues):this(){
_selectedValues = selectedValues;
}

您可以根据需要选择参数的数据类型

此查询' select * from products where [Category ID]...可能只返回一行。尝试替换以下行:

 //SqlCeDataAdapter da = new SqlCeDataAdapter("select * from products where [Category ID] = '" + cat.currID + "'", con);
SqlCeDataAdapter da = new SqlCeDataAdapter("select * from products", con);