代码优化:列表循环和查询C#SQL Server Compact Edition



此处的代码用于检查datagridview(productGridView)中添加的药物之间是否存在任何相互作用

  • 前端:c#with vs2012 .net 4.0
  • 后端:SQL Server紧凑型版4.0

数据库的架构:

  • 表产品:productid;名称

  • 表product_druginteractionClass:productid;duginsionctionClassid

  • 表相互作用:相互作用;duginInteractionClassid1;
    duginsionctionClassid2;风险对

  • table drugIntractionClass:drugInteractionClassid;名称

许多产品可以具有相同的药物相互作用类别

方法是:

  • 循环投掷 productGridView 基于 productid 基于 name 然后根据 productid 选择 druginteractionClassID 然后将结果放入另一个datagridview( listClassification
  • 从dataGridView( listClassification )中创建2个数据中的数据列表///在这里显示一个小问题,因为列表保留了相同的所有药物互动class数字,并且将它们丢弃了双重迭代测试组合互动////如何以编程方式创建单独的列表,而我不知道会添加多少药物?
  • 循环投掷2个列表,并根据组合选择互动,并加入结果,并加入毒品互动类名称

是否可以动态创建列表并将其扔到 组合虽然不知道在运行时间之前列出多少列表?

我也想在交互中循环循环,并检查如果不删除不适当的交互,是否重复了产品。

  • 可能全部可以在一个查询中总结一个(选择选择的选择)?

实际上我是药学专业的学生(我只是喜欢编码并且不做得很好,我什至没有完成任何C#在C#/sql/ado.net之间的600页左右,所以对不起)

        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();

最新更新