0

従業員に毎日の役割または特定の開始日と終了日を持つ役割が割り当てられる人事役割テーブルがあります。マネージャーは、従業員の毎日の役割を一覧表示する一種の人員計画表を求めており、これが私が表を生成する方法です

private string CreateHTMLTable(Int32 month)
{
    StringBuilder strBuilder = new StringBuilder();
    System.Data.DataTable dtAllStaff = new System.Data.DataTable();
    //get all staff
    PersonelApplication.Classes.PersonelClass PersonnelClass = new PersonelClass();

    dtAllStaff = PersonnelClass.GetAllPersonel();

    //create manpower data table
    System.Data.DataTable dtManPowerDataTable = new System.Data.DataTable();

    //create montlhy dt
    //get number of days in month
    int daysInMonth = DateTime.DaysInMonth(DateTime.Now.Year, month);
    //get first day in month
    DateTime firstDayInMonth = new DateTime(DateTime.Now.Year, month, 1);
    //get last day in month
    DateTime lastDayInMonth = new DateTime();
    lastDayInMonth = firstDayInMonth.AddMonths(1).AddDays(-1);



    //start table
    strBuilder.Append("<table>");

    //create header based on number of days in the month
    //append tr strat
    strBuilder.Append("<tr>");
    //add name header for personnle
    strBuilder.Append("<th>");
    strBuilder.Append("Staff");
    strBuilder.Append("</th>");
    for (int i = 1; i <= lastDayInMonth.Day; i++)
    {
        strBuilder.Append("<th>");
        strBuilder.Append(i.ToString() + "/" + month.ToString());
        strBuilder.Append("</th>");
    }

    //append tr end to header row
    strBuilder.Append("</tr>");
    System.Data.SqlClient.SqlConnection sqlConn = new System.Data.SqlClient.SqlConnection();

    sqlConn.ConnectionString = ConnectionClass.CreateConnection.getConnectionString();
    using (sqlConn = ConnectionClass.CreateConnection.publicGetConn())
    {
        sqlConn.ConnectionString = ConnectionClass.CreateConnection.getConnectionString();
        try
        {
            sqlConn.Open();
            if (sqlConn.State == ConnectionState.Open)
            {

                foreach (DataRow row in dtAllStaff.Rows)
                {
                    string personnelName = "";
                    string personnelCode = "";

                    Int32 personnelID = 0; ;

                    personnelCode = row[1].ToString();
                    strBuilder.Append("<tr>");
                    strBuilder.Append("<td>");

                    strBuilder.Append(personnelCode);
                    strBuilder.Append("</td>");
                    for (int i = 1; i <= lastDayInMonth.Day; i++)
                    {
                        //here get the each employee's planned role as well
                        //as actual role 
                    }
                    strBuilder.Append("</tr>");
                }

            }
        }
        catch (Exception ex)
        {
            //pouplate later
        }
        finally
        {

        }

    }

    //end table
    strBuilder.Append("</table>");


    return strBuilder.ToString();
}

私の問題は、特定の日の従業員の役割を返す SQL 関数です。

--actual end date for this role is '08-18-2012'
declare @sdate date
set @sdate= '08-14-2012'
SELECT 
    CONVERT(date,startdate,101)
    ,CONVERT(date,EndDate,101)
    ,StartDate
    ,EndDate
     ,fk_PersonelID
     ,fk_RoleID
  FROM [dbo].JobRolesTable
  where @sdate between StartDate and EndDate 
    and fk_PersonelID = 40

しかし、次の日である「2012 年 8 月 15 日」を検索すると、nada が得られます。これにはカーソルを使用しますが、これを達成できる別の方法はありますか

4

2 に答える 2

0

パラメータの設定が間違っている可能性があります。

クエリが次の形式の場合

SELECT * 
FROM Table
WHERE (@SearchDate BETWEEN @StartDate AND @EndDate) AND Id=@Id

(あなたのように見えます)、日付が正しく指定されている限り、データベースから正しい値を返します。

投稿されたコードで開いている SqlConnection を実際に使用しようとしているコードを表示できますか?

于 2012-09-11T14:26:42.747 に答える
0
DECLARE @sdate DATE = '20120814';

SELECT 
    CONVERT(DATE,StartDate,101) -- what is the purpose of 101 here?
    ,CONVERT(DATE,EndDate,101)  -- what is the purpose of 101 here?
    ,StartDate
    ,EndDate
     ,fk_PersonelID
     ,fk_RoleID
  FROM [dbo].JobRolesTable
  WHERE @sdate >= StartDate 
    AND @sdate < DATEADD(DAY, 1, EndDate) 
    AND fk_PersonelID = 40;
于 2012-09-11T14:25:13.547 に答える