DataSet是否具有Contain或In功能?

时间:2011-10-05 07:28:25

标签: c# asp.net dataset data-access-layer contains

我只是想知道数据库中是否存在某些数据。

Normaly我使用SqlDataReader,在数组或列表中取一个循环SqlDataReader put变量, 并在Business层中再次循环遍历数组或List并与X数据进行比较,以查看它是否在列表或数组中。

 SqlDataReader readerOne = comm_SelectOne.ExecuteReader();
 while (readerOne.Read())
 { 
    ... 
 }

我认为这样效率不高,有两个循环(在Data Access层中收集和在Business层中进行比较)

有没有其他方法可以使用DataSet执行此操作?

3 个答案:

答案 0 :(得分:1)

In中没有“Contains”或“DataSet”功能,因为DataSet本身是DataTable的容器,并且数据已保存在与任何特定DataTable关联的DataRow中。

检查数据库中是否存在数据的最简单方法是编写SQL Count语句,例如SELECT COUNT(columnName) FROM tableName WHERE columnName = 'some value'。如果数据库中不存在'sum value',则返回0,否则返回计数。

答案 1 :(得分:0)

基本上,DataSet只是DataTable的容器。如果要在DataSet实例中找到DataTable实例中的特定数据,可以从DataSet获取DataTable实例,并且有一个名为“Select”的实例方法(使用参数调用它)来查询DataTable实例中的特定数据。 / p>

答案 2 :(得分:0)

我在互联网上找到了参考:

StackFind Data

My Bussines Layer:

 public List<string> CompareInsee(string TheZone, List<object> InseList)
    {
        try
        {
            List<string> TempDict = new List<string>();
            RempliClientInseExtracted(TheZone, ref NomTable);
            DataTable TempDS = oClInse.Get_All_Inse(NomTable);
            DataRow drFound;
            DataColumn[] dcPk = new DataColumn[1];             

            // Set Primary Key
            dcPk[0] = TempDS.Columns["NO_INSEE"];
            TempDS.PrimaryKey = dcPk;
            // Find the Row specified in txtFindArg

           foreach (var oItem in InseList)
           {
               drFound = TempDS.Rows.Find(oItem);
               if (drFound != null) TempDict.Add( oItem.ToString()); 
           }
           return TempDict;

        }
        catch (Exception excThrown)
        {
            if (!excThrown.Message.StartsWith("Err_")) { throw new Exception("Err_BL_ReadAllClientInsee", excThrown); }
            else { throw new Exception(excThrown.Message, excThrown); }
        }
    }

数据访问层:

 public DataTable Get_All_Inse(string NomTable)
    {
        try
        {
            using (var connectionWrapper = new Connexion())
            {
                var connectedConnection = connectionWrapper.GetConnected();
                string sql_SelectAll = "SELECT * FROM " + NomTable;
                SqlCommand comm_SelectAll = new SqlCommand(sql_SelectAll, connectionWrapper.conn);

                SqlDataAdapter adapt_SelectAll = new SqlDataAdapter();
                adapt_SelectAll.SelectCommand = comm_SelectAll;
                DataTable dSet_SelectAll = new DataTable();
                adapt_SelectAll.Fill(dSet_SelectAll);
                dSet_SelectAll.Dispose();
                adapt_SelectAll.Dispose();
                return dSet_SelectAll;
            }
        }
        catch (Exception excThrown)
        {
            if (!excThrown.Message.StartsWith("Err_")) { throw new Exception("Err_GetAllUsrClient", excThrown); }
            else { throw new Exception(excThrown.Message, excThrown); }
        }
    }

所以现在我只有1个循环 - &gt;只是在我的Bussines层,而不是在DAL。

谢谢大家