从dataabse但不可见现场访问 [英] accessing field from dataabse but not visible

查看:113
本文介绍了从dataabse但不可见现场访问的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用的是存储过程来访问asp.net视图字段,我把数据库列HTML表格,这是只有一个行业例外,NetSalaryworkign。它不能被访问,它说,模型不包含它。我试了很多办法,但不能得到工作。

  ALTER PROCEDURE [DBO]。[GetMonthlyReport] @emplID INT = NULL,
    @month VARCHAR(50)= NULL,@BasicSalary INT =空出来,@ BSalaryHour INT =空出

开始
     - SET NOCOUNT ON加入到prevent额外的结果集,从
     - 与SELECT语句的干扰。
    SET NOCOUNT ON;    IF(@emplID不是null,@month IS NOT NULL) - - 如果块开始
    开始
        选择 *
        从MonthlyRecord
        WHERE月份= @month AND EMPLID = @emplID        -------------------------------------------------- -------------
        声明@StartDate日期,@EndDate日期,@mydate日期,@TotalDays INT,INT @TotalHours        设置@mydate = GETUTCDATE()
        设置@StartDate =(选择Convert(VARCHAR(25),DATEADD(DD, - (DAY(@mydate)-1),@数值指明MyDate),101))
        设置@EndDate =(选择Convert(VARCHAR(25),DATEADD(DD, - (DAY(DATEADD(毫米,1,@数值指明MyDate))),DATEADD(毫米,1,@数值指明MyDate)),101))
        设置@TotalDays =((DATEDIFF(DD,@StartDate,@EndDate)+ 1)
           - (DATEDIFF(WK,@StartDate,@EndDate)* 1)
           - (CASE WHEN DATENAME(DW,@StartDate)='周日'THEN 1 ELSE 0 END))
        集@TotalHours =(@TotalDays * 8)
        设置@BasicSalary =(从HrEmployee选择​​BasicSalary,其中EMPLID = @ EMPLID)
        设置@BSalaryHour = @BasicSalary / @TotalHours
        选择@BasicSalary为NetSalary,@BSalaryHour为SalaryPerHour
        -------------------------------------------------- -------------        声明@No_Rows INT
        选择No_Rows = COUNT(*)FROM MonthlyRecord
        WHERE月份= @month AND EMPLID = @emplID
        返回@No_Rows
    END - - 如果块结束
    ELSE --Else块开始
    开始
        返回0
    END --Else块结束
结束

控制器动作:

 公众的ActionResult Generated_PaySlip(INT?EMPLID,弦乐月)
{
    如果(!String.IsNullOrEmpty(会话[管理员]作为字符串))
    {
        诠释? basicSalary = 0;
        诠释? BSalaryPerHour = 0;
        IEnumerable的< getmonthlyreportresult>工资单= DataContext.GetMonthlyReport(EMPLID,月,裁判basicSalary,裁判BSalaryPerHour).ToList();
        ViewBag.Month =的Request.QueryString [月];
        //字符串NetSalary = DataContext.GetMonthlyReport(EMPLID,月)。首先()
        ViewBag.Salary = basicSalary;
        返回视图(工资单);
    }
    其他
    {
        返回RedirectToAction(IsAuth_Page,家);
    }

查看:

  @using EmployeeAttendance_app.Models
@model IEnumerable的< getmonthlyreportresult>@ {    变种物品= Model.FirstOrDefault();
}&所述; TD>
    名称
< / TD>
&所述; TD>
    @ Item.EmplName
< / TD>
&所述; TD>
    指定
< / TD>
&所述; TD>
    @ Item.DeptName
< / TD>< TR风格=BORDER-removedsolid的3px黑>
    < TD>工作总时间与LT; / TD>
    < TD> @ Item.OverallTime< / TD>
    < TD>净工资PKR< / TD>
    < TD> @ Item.NetSalary< / TD>
< / TR>
<表><&TBODY GT;< TR>


解决方案

您应该指定明确的领域,而不是使用select * -

http://msdn.microsoft。 COM / EN-US /库/ dd193296%28V = VS.100%29.aspx

这可能会解决你的问题。

i am using a store procedure to access field in asp.net View, i am putting db columns in HTML table, it's workign except for one field, 'NetSalary'. It can't be accessed, it says that model doesn't contain it. i tried many ways but couldn't get to work.

ALTER PROCEDURE [dbo].[GetMonthlyReport] @emplID INT = NULL,
    @month VARCHAR(50) = NULL, @BasicSalary int = null out ,@BSalaryHour int= Null out
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    IF (@emplID IS NOT NULL AND @month IS NOT NULL) --If Block begins
    BEGIN
        SELECT * 
        FROM MonthlyRecord
        WHERE Month = @month AND EmplID = @emplID

        ---------------------------------------------------------------
        Declare @StartDate Date,  @EndDate Date, @mydate date, @TotalDays int, @TotalHours int

        Set @mydate = GETUTCDATE()
        Set @StartDate = (SELECT CONVERT(VARCHAR(25),DATEADD(dd,-(DAY(@mydate)-1),@mydate),101))
        Set @EndDate = (SELECT CONVERT(VARCHAR(25),DATEADD(dd,-(DAY(DATEADD(mm,1,@mydate))),DATEADD(mm,1,@mydate)),101))
        Set @TotalDays =((DATEDIFF(dd, @StartDate, @EndDate) + 1)
          -(DATEDIFF(wk, @StartDate, @EndDate) * 1)
          -(CASE WHEN DATENAME(dw, @StartDate) = 'Sunday' THEN 1 ELSE 0 END)) 
        Set @TotalHours  = (@TotalDays * 8)
        Set @BasicSalary = (Select BasicSalary from HrEmployee where EmplID=@emplID)
        Set @BSalaryHour = @BasicSalary / @TotalHours
        Select @BasicSalary as NetSalary, @BSalaryHour as SalaryPerHour
        ---------------------------------------------------------------

        Declare @No_Rows int
        Select No_Rows= count(*) FROM MonthlyRecord
        WHERE Month = @month AND EmplID = @emplID
        Return @No_Rows
    END --If block ends
    ELSE --Else block begins
    BEGIN
        RETURN 0
    END --Else block ends
END

Controller Action:

public ActionResult Generated_PaySlip(int? emplID, String month)
{
    if (!String.IsNullOrEmpty(Session["Admin"] as string))
    {
        int? basicSalary= 0;
        int? BSalaryPerHour = 0;
        IEnumerable<getmonthlyreportresult> PaySlip = DataContext.GetMonthlyReport(emplID, month, ref basicSalary, ref BSalaryPerHour).ToList();
        ViewBag.Month = Request.QueryString["Month"];
        //String NetSalary = DataContext.GetMonthlyReport(emplID, month).First()
        ViewBag.Salary = basicSalary;
        return View(PaySlip);
    }
    else
    {
        return RedirectToAction("IsAuth_Page", "Home");
    }

View:

@using EmployeeAttendance_app.Models
@model IEnumerable<getmonthlyreportresult>

@{

    var Item = Model.FirstOrDefault();
}

<td>
    Name
</td>
<td>
    @Item.EmplName
</td>
<td>
    Designation
</td>
<td>
    @Item.DeptName
</td>

<tr style="border-removedsolid 3px black">
    <td>Total Working Time</td>
    <td>@Item.OverallTime</td>
    <td>Net Salary PKR</td>
    <td>@Item.NetSalary</td>
</tr>
<table><tbody><tr>

解决方案

You should specify the fields explicitly rather than use select * -

http://msdn.microsoft.com/en-us/library/dd193296%28v=vs.100%29.aspx

That might fix your problem.

这篇关于从dataabse但不可见现场访问的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆