sql-server 如何从具有多个表的数据库搜索到多个数据网格视图

qvtsj1bj  于 2022-10-31  发布在  其他
关注(0)|答案(2)|浏览(131)

我正在尝试实现一个搜索函数,它将数据库中的多个表返回到多个数据网格视图中。
这是我的表格:

我使用每个存储过程来访问每个表每个数据库表将对应于一个datagridview

用于获取Style表的存储过程

CREATE PROCEDURE [dbo].[FetchCS_V2] @Keyword nvarchar(30)
AS
 SELECT [RID]
      ,[CustomerBrand]
      ,[CustomerStyle]
      ,[ProductName]
      ,[ProductType]
      ,[ValidityDateFrom]
      ,[ValidityDateTo]
      ,[Colorway]
      ,[Season]
      ,[Factory]
  FROM [dbo].[CostSheet_Mst]
  WHERE RID Like '%' + @Keyword + '%'
  OR CustomerStyle Like + '%'+ @Keyword + '%'
  OR ProductName Like + '%'+ @Keyword + '%'
  OR ProductType Like + '%'+ @Keyword + '%'
  OR ValidityDateFrom Like + '%'+ @Keyword + '%'
  OR ValidityDateTo Like + '%'+ @Keyword + '%'
  OR Colorway Like + '%'+ @Keyword + '%'
  OR Season Like + '%'+ @Keyword + '%'
  OR Factory Like + '%'+ @Keyword + '%'

GO

用于获取FOB表的存储过程

CREATE PROCEDURE [dbo].[FetchCS_FOB_V2] @Keyword nvarchar(30)
AS
 SELECT [FobRID]
      ,[RID]
      ,[FOBType]
      ,[Amount]
      ,[Currency]
  FROM [dbo].[CostSheet_FOB]
  WHERE RID IN
  (SELECT  
       [RID]
      FROM CostSheet_Mst
      where [RID] LIKE + '%' + @Keyword + '%')
    OR [FOBType] LIKE + '%' + @Keyword + '%'
    OR [Amount] LIKE + '%' + @Keyword + '%'
    OR [Currency] LIKE + '%' + @Keyword + '%'

GO

这是从数据库中搜索的函数

private void searchFromDB() 
        {

            try
            {
                string mainconn1 = ConfigurationManager.ConnectionStrings["MyConnection"].ConnectionString;
                SqlConnection sqlconn = new SqlConnection(mainconn1);
                SqlCommand sqlcomm1 = new SqlCommand("exec [dbo].[FetchCS_V2] '"+searchTextBox.Text+"'", sqlconn); //stored procedure for master database table
                SqlCommand sqlcomm2 = new SqlCommand("exec [dbo].[FetchCS_FOB_V2] '" + searchTextBox.Text + "'", sqlconn); //stored procedure for FOB tablew
                //sqlcomm1.CommandType = CommandType.StoredProcedure;
                SqlDataAdapter da1 = new SqlDataAdapter();
                SqlDataAdapter da2 = new SqlDataAdapter();
                da1.SelectCommand = sqlcomm1;
                da2.SelectCommand = sqlcomm2;

                DataTable dt1 = new DataTable();
                DataTable dt2 = new DataTable();
                da1.Fill(dt1);
                da2.Fill(dt2);
                dataGridViewStyleSearch.DataSource = dt1;
                dataGridViewFOBSearch.DataSource = dt2;
                sqlconn.Close();

            }
            catch (Exception ex)
            {
                MessageBox.Show(string.Format("There's an error: {0}", ex.Message), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

        }<br>

`
目前,如果搜索关键字是RID

,则搜索函数可以返回多个数据网格视图中的行]
但是,如果我搜索仅存在于FOB表中的字段,则它将仅返回该datagridview

中的行
另外,我想知道使用一个存储过程从所有表中选择字段是否更好?
然后,我可以将其放入一个数据表中,并将其拆分(不确定如何实现)

相关问题