簡體   English   中英

代碼優化:列表循環和查詢C#SQL Server精簡版

[英]code optimisation : list loop and query c# sql server compact edition

此處的代碼用於檢查dataGridView(Productgridview)中添加的葯物之間是否存在任何交互

  • 前端:帶有VS2012 .Net 4.0的C#
  • 后端:SQL Server Compact Edition 4.0

數據庫的架構:

  • 表產品:productId; 名稱

  • 表product_druginteractionclass:productId; druginteractionclassId

  • 表交互:interactId; druginteractionclassId1;
    druginteractionclassId2; 風險評論

  • 表druginteractionclass:druginteractionclassId; 名稱

許多產品可以具有相同的葯物相互作用類別編號

方法是:

  • 循環拋出Productgridview以根據名稱檢索productid並根據productid選擇druginteractionclassId ,然后將結果放入另一個dataGridView( listclassification
  • DataGridView(listclassification)創建列druginteractionclassId數據2所列出///一個小問題,這表明同一種葯物之間的相互作用,因為名單持有相同的所有druginterctionclass數量和雙重迭代扔來測試組合相互作用/// 如何創建以編程方式單獨列出,但我不知道將添加多少葯物?
  • 循環拋出2個列表,並根據組合選擇相互作用,並將結果與​​葯物相互作用類別名稱結合在一起

是否可以動態創建列表並循環拋出它們以進行組合,而直到運行時才知道多少列表?

我認為還可以在交互網格視圖內循環,如果沒有刪除不適當的交互,請檢查是否重復了某個產品。

  • 可能是一個查詢中可以概括的全部,如何編寫一個(select的選擇)?

實際上我是葯學專業的學生(我只是喜歡編寫代碼並且做得不好,我什至在c#/ sql / ado.net之間的600頁左右甚至都沒有完成任何c#書,所以請問)

        var ds2 = new DataSet();
        for (var i = 0; i < Productgridview.Rows.Count; i++)
        {
            var listclasse = Productgridview.Rows[i].Cells["Productid"].Value.ToString();
            var datadrug2 = "SELECT *  FROM product_druginteractionclass" +
                            " where productId = '" +
                            listclasse + "'"; // listclasse is the list of  manually added drugClass
            var connection1 = new SqlCeConnection(connectionString);

            var dataadapter1 = new SqlCeDataAdapter(datadrug2, connection1);
            //var ds = new DataSet();
            connection1.Open();
            dataadapter1.Fill(ds2, "product_druginteractionclass");
            connection1.Close();
        }
        listclassification.DataSource = ds2;
        listclassification.DataMember = "product_druginteractionclass";

/////////////// put the druginteractionclass into 2 lists 
        var list1 = new List<string>();
        var list2 = new List<string>();
        foreach (DataGridViewRow item in listclassification.Rows)
            if ((item.Cells.Count >= 2) && //atleast two columns
                (item.Cells[1].Value != null)) //value is not null
            {
                list1.Add(item.Cells[1].Value.ToString());
                list2.Add(item.Cells[1].Value.ToString());
            }
        //for (var i = 0; i <= list.Count - 1; i++)
        //{
        //   // MessageBox.Show(list[i].ToString());
        //}

        //////////// select interaction based on druginteractionclass
        var ds = new DataSet();
        for (var i = 0; i <= list1.Count - 1; i++)
            for (var j = 0; j <= list2.Count - 1; j++)
            {
                var value = list1[i];
                var value1 = list2[j];
                var datadrug3 = "SELECT u1.name, u2.name  , m.* " +
                                "FROM druginteractionclass u1 " +
                                "left outer JOIN interaction m" +
                                " ON u1.druginteractionclassId = m.druginteractionclassId1 " +
                                "left outer JOIN druginteractionclass u2 " +
                                "ON u2.druginteractionclassId = m.druginteractionclassId2" +
                                " where m.druginteractionclassId1 = '" + value +
                                "' and m.druginteractionclassId2 ='" + value1 + "'" +
                                "Order by m.severity ";

                var connection = new SqlCeConnection(connectionString);

                var dataadapter = new SqlCeDataAdapter(datadrug3, connection);

                connection.Open();
                dataadapter.Fill(ds, "interaction");
                connection.Close();
            }
        dataGridView1.DataSource = null;
        dataGridView1.DataSource = ds;
        dataGridView1.DataMember = "interaction";

        /////// remove duplicated interactions  
        for (var currentRow = 0; currentRow < dataGridView1.Rows.Count - 1; currentRow++)
        {
            var rowToCompare = dataGridView1.Rows[currentRow];

            for (var otherRow = currentRow + 1; otherRow < dataGridView1.Rows.Count; otherRow++)
            {
                var row = dataGridView1.Rows[otherRow];

                var duplicateRow = true;

                for (var cellIndex = 0; cellIndex < row.Cells.Count; cellIndex++)
                    if (!rowToCompare.Cells[2].Value.Equals(row.Cells[2].Value))
                    {
                        duplicateRow = false;
                        break;
                    }

                if (duplicateRow)
                {
                    dataGridView1.Rows.Remove(row);
                    otherRow--;
                }
            }
        }
                        var datadrug3 =
                        @" SELECT m.interactionId , u1.name , n.name , u2.name,n2.name   , m.riskComment , m.precautionComment , m.severity 

                         FROM druginteractionclass u1 
                         left outer JOIN interaction m 
                         ON u1.druginteractionclassId = m.druginteractionclassId1 
                         left outer JOIN druginteractionclass u2 
                         ON u2.druginteractionclassId = m.druginteractionclassId2 

                         left outer join product_druginteractionclass p1 
                         ON  p1.druginteractionclassId = m.druginteractionclassId1 

                         left outer JOIN product_druginteractionclass p2 
                         ON  p2.druginteractionclassId = m.druginteractionclassId2 

                         left outer join product n 
                         ON  n.productId= p1.productId 

                         left outer join product n2 
                         ON n2.productId= p2.productId 
                         where n.productId = @value  and n2.productId = @value1 ";

                    var connection = new SQLiteConnection(connectionString3);
                    var com = new SQLiteCommand(datadrug3, connection);
                        com.Parameters.AddWithValue("@value", value);
                        com.Parameters.AddWithValue("@value1",value1 );
                        var dataadapter = new SQLiteDataAdapter(com);

                    connection.Open();
                    dataadapter.Fill(ds, "interaction");
                    connection.Close();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM