1

データグリッドにストアド プロシージャを入力する必要があります。asp.netでやった

http://g1204.hizliresim.com/w/5/43qb1.jpg

しかし、Silverlight ではそれができません。

http://e1203.hizliresim.com/v/x/3x3dw.jpg

データグリッドにasp.netを入力する方法のコードは次のとおりです。

DataTable dt = new DataTable();
SqlCommand cmd = new SqlCommand();

// Open the connection 
using (SqlConnection cnn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
{
   cnn.Open(); 

   cmd.Connection = cnn;
   cmd.CommandType = CommandType.StoredProcedure;
   cmd.CommandText = "sp_get_Scorelist";

   cmd.Parameters.Add("d1", new DateTime(2012, 03, 01));
   cmd.Parameters.Add("d2", DateTime.Now);

   using (SqlDataAdapter da = new SqlDataAdapter(cmd))
   {
       da.Fill(dt);
   }
}          

GridView1.DataSource = dt.DefaultView;
GridView1.DataBind();

これが私のストアドプロシージャです。

USE [ATLAS] 
GO 
/****** Object:  StoredProcedure [dbo].[sp_get_Scorelist]    Script Date: 05.04.2012 14:54:30 ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
ALTER Procedure [dbo].[sp_get_Scorelist](@d1 datetime,@d2 datetime) 
AS 
BEGIN 
SET FMTONLY OFF --SQL 2008 sonrası desteği yok, bir sonraki sürümde problem çıkacak 
SET NOCOUNT ON 
DECLARE @DT1 DateTime ,@DT2 DateTime ,@ToDay DateTime 
DECLARE @Name nvarchar(25), @Surname nvarchar(25) , @EID int, @DayScore nvarchar(25) 
DECLARE @Query varchar(Max), @FName varchar(80) 
if (select name from tempdb..sysobjects where name like '#ScoreList%') <> '' DROP TABLE #Scorelist 
Create Table  #ScoreList (Name nvarchar(25),Surname nvarchar(25),ID int) 
SET @DT1=@D1 
SET @DT2=@D2 
WHILE @DT1 <= @DT2   
BEGIN 
  SET @FName = Convert (Varchar(2),DATEPART(day,@DT1))+'_'+Convert(Varchar(2),DATEPART(month,@DT1)) -- +Convert(Varchar(4),DATEPART(Year,@DT1)) 
  SET @Query=N'ALTER TABLE #ScoreList ADD F'+ @FName +' nvarchar(25)' 
  EXECUTE(@Query) 
  DECLARE CRS_ALLOTMENT CURSOR FOR   
  --SET DATEFIRST 1 
    Select hr.Name, hr.Surname, hr.EmployeeID, sc.DayScore from hr_scoring sc left join hr_employee hr on  sc.EmployeeID = hr.employeeID Where ScoreDate=@Dt1 
OPEN CRS_ALLOTMENT   
FETCH NEXT FROM CRS_ALLOTMENT INTO @Name ,@Surname ,@EID ,@DayScore  
WHILE @@FETCH_STATUS =0 
BEGIN         
  IF (Select Count(*) FROM #ScoreList Where ID=@EID ) > 0 
  BEGIN 
    SET @Query=N'UPDATE #ScoreList Set F'+@FName+'='''+@DayScore+''' Where ID='+ Convert(varchar(30),@EID) 
  END 
  ELSE 
  BEGIN 
SET @Query=N'INSERT INTO #ScoreList (Name,Surname,ID,F'+@FName+') Values('''+@Name+''' '+','+' '''+ @SurName+ ' '''+ ','+Convert(Varchar(25),@EID)+','+' '''+@DayScore+' '''+') ' 
  END 
      EXECUTE(@Query)          
FETCH NEXT FROM CRS_ALLOTMENT INTO @Name ,@Surname ,@EID ,@DayScore  
END 
  CLOSE CRS_ALLOTMENT 
  DEALLOCATE CRS_ALLOTMENT     
    SET @DT1 = @DT1+1 
END 


Select * From #Scorelist Order By Name,SurName 

END 

私の質問は、Silverlight のストアド プロシージャからデータグリッドを埋めるにはどうすればよいですか?

ドメインサービスまたはサーバー側で行う必要がありますか? 例を書くと素晴らしいでしょう。

とにかくありがとう

4

1 に答える 1

0

コードがどこでどのように実行されているかを少し考えてみてください。

  • ASP.NETでは、すべてが(Web) サーバー上で実行され、クライアントに送信されてブラウザーに表示される HTML に変換されます。コードは完全にサーバー上で実行されます(Javascript スクリプトを除く)。したがって、データベース サーバーとストアド プロシージャに直接アクセスできます。

  • 一方、Silverlightでは、コードは Silverlight プラグイン内のクライアントで実行されます。そこにはデータベース サーバーはありません。おそらく、そのクライアント マシンも自分の場所からデータベース サーバーに直接接続できません。

したがって、Silverlight では、ドメイン サービスを介してすべてのデータ アクセスを作成する必要があります。ドメイン サービスは、そのデータをフェッチし、SL クライアントがクライアントのマシンに表示できる何らかの方法でデータを返すメソッドを公開する必要があります。

于 2012-04-05T12:39:55.013 に答える