-1

従業員の出入りエントリに基づいてレポートを生成する必要があるアプリケーションを開発しています。動的クエリを使用したデータベース関連のアプリケーションの経験がありません。この特定のアプリケーションでは、動的 SQL クエリを渡す必要があります。

これでは、ユーザーの選択に基づいて列名を選択し、それらを別の SQL クエリにパラメーターとして渡す必要があります。ここにクエリがあります...

DECLARE @cols AS NVARCHAR(MAX),

    @query  AS NVARCHAR(MAX)


select @cols = STUFF((SELECT ',' + QUOTENAME(date +'_'+Logname) 
                    from
                    (
                      select doordate,
                        convert(char(10),doordate, 101) date, 
                        LogName
                      from DoorLog
                      cross apply
                      (
                        select 'In' LogName
                        union all
                        select 'Out' 
                      ) l
                    ) s   
                    group by convert(char(10), doordate, 112), date, Logname
                    order by convert(char(10), doordate, 112)
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query 
    = 'select employeeid, name, '+@cols+'
       from
       (
         select employeeid, name, 
          convert(char(8), doortime, 108) DoorTime,
          date + ''_''+ col col_names
         from
         (
            select p.employeeid,
              p.name,
              convert(char(10),d.doordate, 101) date,
              min(d.doordate) [In],
              max(d.doordate) [Out]
            from person p
            left join doorlog d
              on p.employeeid = d.employeeid
            group by p.employeeid, p.name, 
              convert(char(10),d.doordate, 101)
         )src
         unpivot
         (
           doortime
           for col in ([In], [Out])
         ) unpiv
       ) p
       pivot
       (
          max(doortime)
          for col_names in('+@cols+')
       ) piv'

execute(@query)

このコードを C# コードで使用する方法を理解できませんでした。

助けてください。

前もって感謝します ...

4

1 に答える 1

1

最善の策は、着信要求を処理できるストアド プロシージャをデータベースに作成し、クエリを実行することです。ストアド プロシージャの詳細は次のとおりです。

http://msdn.microsoft.com/en-us/library/aa174792(v=sql.80).aspx

次に、C# コードでデータベースへの接続を作成する必要があります。

http://msdn.microsoft.com/en-us/library/s4yys16a(v=vs.71).aspx

最後に、作成したばかりの接続を使用してストアド プロシージャを呼び出し、C# コードからパラメーターを渡す必要があります。これについては、StackOverflow で何度も回答されています。

C# プログラム内でストアド プロシージャを実行する方法

于 2013-03-21T08:00:48.643 に答える