Привет, у меня есть Get API, который запрашивает данные из 3 хранимых процедур, он работает нормально, когда он вызывает только один раз, но не удается, когда этот API вызывает несколько раз simoltaneousely, например, когда он вызывает 10 раз, 2-3 раза не удается и отправить исключение, что он не находит хранимую процедуру
это моя функция
public POSCustomerDetailResponse POSCustomerDetail(string BranchID, string CustomerCode, string AllBranches, string CurrentDate)
{
POSCustomerDetailResponse objDetails = new POSCustomerDetailResponse();
int GramentDue = 0, UnderProcess = 0;
double AmountDue = 0.0;
int PendingOrder = 0;
DataSet ds = new DataSet();
DataTable dt = new DataTable();
SqlCommand cmd = new SqlCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "sp_CustomerAllStoreData";
cmd.Parameters.AddWithValue("@Flag", 3);
cmd.Parameters.AddWithValue("@BranchId", BranchID);
cmd.Parameters.AddWithValue("@CustCode", CustomerCode);
cmd.Parameters.AddWithValue("@SelectedBranch", AllBranches);
cmd.Parameters.AddWithValue("@FilterFlag", 3);
ds = Appclass.GetData(cmd);
if (ds.Tables.Count > 0)
{
dt = ds.Tables[0];
foreach (DataRow dtrow in dt.Rows)
{
GramentDue = GramentDue + Convert.ToInt32(dtrow["ReadyClothes"].ToString());
AmountDue = AmountDue + Convert.ToDouble(dtrow["Balance"].ToString());
UnderProcess = UnderProcess + Convert.ToInt32(dtrow["BalQty"].ToString());
}
PendingOrder = ds.Tables[0].Rows.Count;
}
objDetails.PendingOrders = PendingOrder;
objDetails.DueAmt = Math.Round(AmountDue, 2);
objDetails.ReadyPcs = GramentDue;
objDetails.UnderProcessPcs = UnderProcess;
DataSet ds1 = new DataSet();
ds1 = GetCustRatings(CurrentDate, BranchID, CustomerCode);
if (ds1.Tables[0].Rows.Count > 0)
{
objDetails.AllRating = Convert.ToInt32(ds1.Tables[0].Rows[0]["AllRating"]);
objDetails.CurrentRating = Convert.ToInt32(ds1.Tables[0].Rows[0]["CurrentRating"]);
objDetails.IsActive = ds1.Tables[0].Rows[0]["IsActiveCust"].ToString();
objDetails.IsNewCustomer = ds1.Tables[0].Rows[0]["NewCustomer"].ToString();
objDetails.CustomerAtRisk = ds1.Tables[0].Rows[0]["CustomerOverDue"].ToString();
}
DataSet ds2 = new DataSet();
ds2 = GetPackageDetails(CustomerCode, CurrentDate, BranchID);
if (ds2.Tables[0].Rows.Count > 0)
{
objDetails.PackageName = ds2.Tables[0].Rows[0]["PackageName"].ToString();
objDetails.PackageStartDate = ds2.Tables[0].Rows[0]["StartDate"].ToString();
objDetails.PackageExpiryDate = ds2.Tables[0].Rows[0]["EndDate"].ToString();
}
var dsCust = GetCustomerDetails(BranchID, CustomerCode);
if (dsCust.Tables[0].Rows.Count > 0)
{
objDetails.MemberShipId = dsCust.Tables[0].Rows[0]["MemberShipId"].ToString();
objDetails.CurrencyType = dsCust.Tables[0].Rows[0]["CurrencyType"].ToString();
}
return objDetails;
}
и это моя функция для установки соединения и заполнения данных
public static DataSet GetData(SqlCommand cmd)
{
sqlConStr = strSqlConn();
SqlConnection con = new SqlConnection(sqlConStr);
SqlDataAdapter adap = new SqlDataAdapter();
if (con.State == ConnectionState.Open)
{
con.Close();
}
else
{
con.Open();
}
DataSet ds = new DataSet();
cmd.Connection = con;
adap.SelectCommand = cmd;
adap.Fill(ds, "table");
con.Close();
return ds;
}