我只是想知道数据库中是否存在某些数据。
Normaly我使用SqlDataReader
,在数组或列表中取一个循环SqlDataReader put变量,
并在Business层中再次循环遍历数组或List并与X数据进行比较,以查看它是否在列表或数组中。
SqlDataReader readerOne = comm_SelectOne.ExecuteReader();
while (readerOne.Read())
{
...
}
我认为这样效率不高,有两个循环(在Data Access层中收集和在Business层中进行比较)
有没有其他方法可以使用DataSet执行此操作?
答案 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)
我在互联网上找到了参考:
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。
谢谢大家