我正在使用一个Web服务,其中许多操作应该从数据库中填充数据。为了避免对数据库的并发调用,我创建了一个带有静态数据变量的类,我的方法将对数据表执行select操作以获取用户名,通过用户代码过滤。 偶尔无规,被调用的webMethods返回ERROR400(坏请求)到客户端,所述误差是"异常消息为'数据表内部索引已损坏:' 5'&#34 ;。 我已经研究过这个问题,但不幸的是,大多数主题都是在多线程环境中处理数据表的操作(添加/修改/删除行),而我的操作只包含数据表上的select操作。 请找填充DataTable中的代码,(这是理论上将彻底填补了数据表,在所有Web方法调用下面,因为一旦数据表被填满时,"如果(DtName ==" dtUsers&# 34;&& dtUsers == null)"条件将阻止重新填充)。
public static DataTable dtUsers;
public static void InitialiseData(string DtName)
{
try
{
var client = new MongoClient(EMRWS.MongoConstr);
var db = client.GetDatabase(EMRWS.MongoDB);
DataRow dr1;
if (DtName == "dtUsers" && dtUsers ==null)
{
var usercol = db.GetCollection<Cls_Users>("tbl_Users");
dtUsers = new DataTable();
dtUsers.Columns.Add("usercode", typeof(string));
dtUsers.Columns.Add("username", typeof(string));
dtUsers.Columns.Add("usertype", typeof(string));
dtUsers.Columns.Add("usersubtype", typeof(string));
usercol.AsQueryable().ToList().ForEach
(
p =>
{
dr1 = dtUsers.NewRow();
dr1["usercode"] = p.User_Code;
dr1["username"] = p.User_Name;
dr1["usertype"] = p.User_Type;
dr1["usersubtype"] = p.User_SubType;
dtUsers.Rows.Add(dr1);
}
);
}
}
catch (Exception ex)
{
throw ex;
}
}