Download as doc, pdf, or txt
Download as doc, pdf, or txt
You are on page 1of 6

2 farkl yntem kullanarak Cevaplar tablosuna verileri kaydettik. 1. Projemize bir SqlServerProject ekledik ve bu projeye UserDefinedStoredProcedure attk.

Bu projenin ierii aadaki gibidir.


public partial class StoredProcedures { [Microsoft.SqlServer.Server.SqlProcedure] public static void CEVAPLARIKAYDET(String xml) { byte[] dizi = Encoding.UTF8.GetBytes(xml.ToString()); MemoryStream ms = new MemoryStream(dizi); XmlTextReader reader = new XmlTextReader(ms); DataSet ds = new DataSet(); ds.ReadXml(reader); SqlConnection con = new SqlConnection("Context Connection=true"); con.Open(); SqlCommand cmd = new SqlCommand(); cmd.Connection = con; SqlTransaction trans = con.BeginTransaction("CEVAPKAYDET"); cmd.Transaction = trans; try { for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { cmd.CommandText="insert into Cevaplar (KullaniciID,SoruID,SecenekID) values ('"+ds.Tables[0].Rows[i] ["KullaniciID"]+"',"+ds.Tables[0].Rows[i]["SoruID"] +","+ds.Tables[0].Rows[i]["SecenekID"]+")"; SqlContext.Pipe.ExecuteAndSend(cmd); } trans.Commit(); } catch (Exception ex) { trans.Rollback(); } } };

Kayt yapmaya altmz aspx ierii de aadaki gibidir.


StringBuilder sb=new StringBuilder("<?xml version=\"1.0\" encoding=\"utf-8\"?><root>"); for (int i = 0; i < liste.Count; i++) { sb.Append("<Cevap>"); foreach (AnketSecenekInfo item in liste[i].Secenekler) { if (item.IsChecked == true) { sb.AppendFormat("<KullaniciID>{0}</KullaniciID><SoruID>{ 1}</SoruID><SecenekID>{2}</SecenekID>","user",liste[i].SoruID,item.SecenekI D); }

} sb.Append("</root>"); byte[] dizi = Encoding.UTF8.GetBytes(sb.ToString()); MemoryStream ms = new MemoryStream(dizi); XmlTextReader reader = new XmlTextReader(ms); DataSet ds = new DataSet(); ds.ReadXml(reader); Helper hlp = new Helper(); SqlParameter[] paramdizi = new SqlParameter[1] { new SqlParameter("@xml",SqlDbType.VarChar) }; paramdizi[0].Value = sb.ToString(); hlp.ExecuteNonQuery("CEVAPLARIKAYDET", CommandType.StoredProcedure, paramdizi);

} sb.Append("</Cevap>");

2. Bu yntemde de Xml ierii dorudan bir stored procedure ierisine gnderilmektedir. Stored Procedure ierii aadaki gibidir.
alter proc CEVAPLARIMIKAYDET ( @error int output, @xml varchar(500), @handler int ) as begin Begin transaction EXEC sp_xml_preparedocument @handler output, @xml /*Yukardaki procedure yardmyla gelen xml ierii okunacak duruma getiriliyor*/ create table #temp ( KullaniciID varchar(10), SoruID int, SecenekID int ) insert into #temp (KullaniciID,SoruID,SecenekID) ( SELECT KullaniciID,SoruID,SecenekID FROM OPENXML(@handler, '/Root/Cevap',2) WITH /*XML ierii okunacak duruma getiriliyor*/ ( KullaniciID varchar(10), SoruID int, SecenekID int ) ) if (@@Error<>0) begin rollback /*RaisError ('lem srasnda bir hata olutu',16,1) Hata byle gnderilebilir*/ set @error =1 end

EXEC sp_xml_removedocument @handler /*Dkman bellekten temizleniyor*/ /*Burada cursor tanmlayp temp tablo ierisindeki kaytlar teker teker dolayoruz.*/ declare @KullaniciID varchar(10) declare @SoruID int declare @SecenekID int declare c cursor for select KullaniciID,SoruID,SecenekID from #temp open c fetch NEXT from c into @KullaniciID,@SoruID,@SecenekID while @@FETCH_STATUS=0 begin insert into Cevaplar(KullaniciID,SoruID,SecenekID) values(@KullaniciID,@SoruID,@SecenekID) fetch NEXT from c into @KullaniciID,@SoruID,@SecenekID if (@@Error<>0) begin rollback /*RaisError ('lem srasnda bir hata olutu',16,1) Hata byle gnderilebilir*/ set @error =1 end end commit set @error =0 end

aspx ieriimiz ise


SqlParameter[] paramdizi = new SqlParameter[3] { /*ReturnValue tipi ilk parametre olmaldr*/ new SqlParameter("@error",SqlDbType.Int), new SqlParameter("@xml",SqlDbType.VarChar), new SqlParameter("@handler",SqlDbType.Int) }; paramdizi[0].Direction = ParameterDirection.ReturnValue; paramdizi[1].Value = sb.ToString(); paramdizi[2].Value = 2; Helper hlp = new Helper(); hlp.ExecuteNonQuery("CEVAPLARIMIKAYDET", CommandType.StoredProcedure, paramdizi); string mesaj=""; if (paramdizi[0].Value.ToString() == "1") { mesaj="lem Baarl"; } else { mesaj="lem srasnda hatalar olutu ve kayt iptal edildi"; } Page.ClientScript.RegisterClientScriptBlock(typeof(string), "mesaj", "<script language='javascript'>alert('"+mesaj+"')</script>");

Cevaplar getirmek iin de aadaki StoredProceduru yazdk


alter proc SONUCGETIR ( @AnketID int ) as begin select count(*) as Toplam,SO.SoruMetni,SE.SecenekMetni from Cevaplar as CE inner join Sorular as SO on SO.SoruID=CE.SoruID inner join Secenekler as SE on SE.SecenekID=CE.SecenekID where SO.AnketID=@AnketID group By SO.SoruMetni,SE.SecenekMetni order by SO.SoruMetni end

XML ieriimizi bu procedure kullanarak dolduruyoruz.


<?xml version="1.0" encoding="utf-8" ?> <Sorular> <Soru ID="0" Text="denememe"> <Secenek ID="0" Text="deneme" Toplam="2" /> <Secenek ID="0" Text="denememe" Toplam="1" /> </Soru> <Soru ID="1" Text="hjhjh hjhjj"> <Secenek ID="1" Text="Artk olsun muuu" Toplam="1" /> <Secenek ID="1" Text="hjhjh hjhjj" Toplam="2" /> </Soru> <Soru ID="2" Text="soru2ghghgh"> <Secenek ID="2" Text="fgfgfg" Toplam="3" /> </Soru> </Sorular>

Flash ierisinde bu verileri okumak iin var xmlLoader:URLLoader=new URLLoader(); xmlLoader.addEventListener(Event.COMPLETE,xmlyuklendi); xmlLoader.load(new URLRequest("http://localhost:30000/Anket%20%20Kopya/SonucYukle.aspx")); var docXML:XML; var sorular:Array; var secenekler:Array; function xmlyuklendi(e:Event):void { docXML=new XML(e.target.data); docXML.ignoreWhitespace=true; sorular=new Array(docXML.Soru.length()); secenekler=new Array(docXML.Soru.Secenek.length()); for(var i=0;i<sorular.length;i++)

{ sorular[i]=[docXML.Soru[i].@ID,docXML.Soru[i].@Text]; } for(var s=0;s<secenekler.length;s++) { secenekler[s]=[docXML.Soru.Secenek[s].@ID,docXML.Soru.Secenek[s].@Text]; } } Aadaki fonksiyon dikdrtgen iziyor function BilgiYukle():void { soruNo_txt.text=soruno+1; soruMetni_txt.text=sorular[soruno][1]; var soruID=sorular[soruno][0]; var bas=100; for (var i=0;i<secenekler.length;i++) { if (secenekler[i][0]==soruID) { var rectangle:Shape = new Shape; // initializing the variable named rectangle rectangle.graphics.beginFill(Math.round( Math.random()*0xFFFFFF )); // choosing the colour for the fill, here it is red rectangle.graphics.drawRect(100, bas+i*30,secenekler[i][2]*10 ,30); // (x spacing, y spacing, width, height) rectangle.graphics.endFill(); // not always needed but I like to put it in to end the fill addChild(rectangle); // adds the rectangle to the stage var txt:TextField=new TextField(); txt.x=secenekler[i][2]*10; txt.y=bas+i*30; txt.width=200; txt.height=30; txt.text=secenekler[i][1]; addChild(txt); } } }

Flash ierisine param value ile deer gndermek :


<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.c ab#version=7,0,19,0" width="550" height="400" title="ReadingFlashVars"> <param name="movie" value="ReadingFlashVars.swf" /> <param name="quality" value="high" /> <param name="FlashVars" value="day=Thursday&month=November&year=2008" /> <embed src="ReadingFlashVars.swf" width="550" height="400" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" FlashVars="day=Thursday&month=November&year=2008"></embed>

</object>

Okurken
displayData.width = 300; displayData.border = true; addChild(displayData); displayData.text = " < Display Flash Vars > "; var objParam:Object = LoaderInfo(this.root.loaderInfo).parameters; for (var key:String in objParam) { displayData.appendText("\n " + key + " :: " + objParam[key]); }

You might also like