1

Konu: fox içinden c#

Foxpro içinden c#  a parametre gönderme ve geriye parametre döndürmede sorunsuz çalışıyor.

Fox içinden c# a dizi  nasıl gönderirim ve c# içinden fox a dizi nasıl döndürebilirim.

Benim aklıma gelen yöntem fox dan  xml yaratmak aynı isimli xml i  c# dan okumak

bunun  dışında çözüm var mı ?

teşekkürler

ÖRNEK
     public string ornek ( string[] dizi1 )
{   

.....
.....
  return dizi2 [] ;
  }

2

Re: fox içinden c#

Dogrudan dizi oluyor zaten. F#'li ornek vardi.

3

Re: fox içinden c#

Üsdatlar foxpro içerisinden c# ı kullanmayı anlayamadım.neden böyle bir şeye ihtiyaç duyalım.olayı biraz açabilirmiyiz?ne avantajları olabilir?

En büyük sermaye nakit,nakit sermaye vakittir...

4

Re: fox içinden c#

merhaba ,

ben web servisleri için kullanıyorum .

bunun dışında    fox un 6-7 yıl sonra açmazları artacak. 

şimdiden c# a başlamak doğrudur diye düşünüyorum.

5

Re: fox içinden c#

Neyzen,
Benim hali hazirda kullanimda olan C# rutinim belki iyi bir ornek olur. Yillardir VFP tablolariyla calisan bir uygulamamiz vardi. Hala VFP versiyonu destekleniyor. Ancak son versiyonu hem VFP hem de SQL server destekli. Kullanici seciyor hangisini isterse (ve nedense tamami SQL server secti). Mevcut kullanicilari SQL server'a gecirirken (upsize hikayesi) data aktarimi dert. SQL server'a bol miktarda data aktarmak gerekiyorsa bu is epey zaman aliyor ve hizlandirmak icin bir dizi yontem var. Bu yontemlarin icinde benim en hizli buldugum .Net'deki SqlBulkCopy class idi. Ben de onu kullandim. C#'da VFP datasina baglanip SQL server'a aktaran kod oldu. Ayni anda birden fazla tabloyu asenkron olarak aktariyor. Bu C# rutininden once bazi aktarimlarimiz saatler surebiliyor ve hatta bazen zaman asimina ugrayip kaliyordu. Simdi birkac dakikadan fazla surmuyor. Onun kodu, nasil register edilecegi VFP kullanim ornegi burada olacakti. SqlBulkCopy diye bir bak istersen.

6

Re: fox içinden c#

Fox içinden c# a dizi  nasıl gönderirim ve c# içinden fox a dizi nasıl döndürebilirim.
biraz uğraştım yapamadım. bir örnek yazabilirmisiniz ?
internet üzerinde okuduğum makalelerde dizi boyu çok büyükse fox un
sınırlamalarından dolayı sorun çıkabilir diyordu  gerçekten sorun olurmu?

teşekkürler

7

Re: fox içinden c#

C#'a array gonderme kismi bende de sorun cikardi, fazla ugrasmadim. Array yerine XML string gonderip, array almak daha kolayima geldi. Array boyu cok buyukse sorun cikabilir ama onun C# ile ilgisi yok zaten VFP9'da array limii icin mevcut hafiza hikayesi var. Sonucuda XML dataset olarak almak mumkun (hatirladigim eger dataset dondururses elemanlarina VFP ulasamiyor ancak ds.GetXml'i VFPden kullanabiliyorsun).

C# kodu:

C#
using System;

using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.Collections.Specialized;
using System.IO;
using System.Xml.Linq;
 
namespace csCOM
{
 
    #region Interface
    [Guid("36065C93-92AB-408d-B43E-3BEACC61D9E1")]
    [ComVisible(true)]
    public interface ICSCOMUtils
    {
        #region Properties
        #endregion
 
        #region Methods
        string[] GetFileList(string foldersXML,string searchPattern, bool includeSubFolders);
        string[] GetFileList2(string folder, string searchPattern, bool includeSubFolders);
        #endregion
    }
 
    #endregion
 
    #region InterfaceEvents
    [Guid("A36B440F-75DA-4398-A356-533A684888F8")]
    [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
    public interface ICSCOMUtilEvents
    {
        #region Events
 
        #endregion
    }
    #endregion
 
    [ClassInterface(ClassInterfaceType.AutoDual)]           // No ClassInterface
    [ComSourceInterfaces(typeof(ICSCOMUtilEvents))]
    [Guid("EC248819-8E55-4ca2-B9A9-F8A7D4854AC8")]      // CLSID
    [ProgId("CSCOM.Util")]
    [ComVisible(true)]
    public class CSCOMUtil : ICSCOMUtils
    {
        #region ICSCOMUtils Members
 
        public string[] GetFileList(string foldersXML,string searchPattern, bool includeSubFolders)
        {
            XDocument xml = XDocument.Parse(foldersXML);
 
            StringCollection result = new StringCollection();
            foreach (XElement x in xml.Descendants("folders"))
            {
                string folder = x.Attribute("folder").Value;
                result.AddRange(
                Directory.GetFiles(folder, searchPattern,
                includeSubFolders
                ? SearchOption.AllDirectories
                : SearchOption.TopDirectoryOnly).ToArray());
            }
            string[] files = new string[result.Count];
            result.CopyTo(files, 0);
            return files;
        }
 
        public string[] GetFileList2(string folder, string searchPattern, bool includeSubFolders)
        {
            StringCollection result = new StringCollection();
                result.AddRange(
                Directory.GetFiles(folder, searchPattern,
                includeSubFolders
                ? SearchOption.AllDirectories
                : SearchOption.TopDirectoryOnly).ToArray());
 
            string[] files = new string[result.Count];
            result.CopyTo(files, 0);
            return files;
        }
        #endregion
    }
}

GUID'leri yeniden uretebilirsin (tools\Create Guid) ya da oldugu gibi kullan.

VFP test kodu:

Visual Fox Pro
Sys(2339,1)

Local loCSCOM As "CSCOM.Util"
loCSCOM = Createobject("CSCOM.Util")
 
CREATE CURSOR folders (folder m)
INSERT INTO folders VALUES ("c:\temp")
INSERT INTO folders VALUES ("c:\ATI")
INSERT INTO folders VALUES ("c:\Program files")
INSERT INTO folders VALUES ("c:\Windows")
CURSORTOXML('folders','m.lcFolders',2)
 
start = SECONDS()
laResult = loCSCOM.GetFileList(m.lcFolders,"*.*",.T.)
DIMENSION laResult[ALEN(laResult),1]
CREATE CURSOR result (filename c(254))
APPEND FROM ARRAY laResult
? SECONDS()-m.start, ALEN(laResult)
browse

Daha az sayida folder ile basla. Ben array limit icin fazla koydum. Benim makinede ilk calismasinda:
144 saniye, 126583 dosya
sonraki calismalari (caching):
5 saniye, 126583 dosya

8

Re: fox içinden c#

çetin hocam,şimdi anladım.sanırım ileride banada lazım olacak :-) bilgileriniz için teşekkür ederim

En büyük sermaye nakit,nakit sermaye vakittir...

9

Re: fox içinden c#

çok teşekkurler.

c# a  gönderip alacağım parametrelerde küçük boyutlu 8 - 9 tane dizi eleman vardı.
bu işleri xml ile yaptım yavaşta değil gibi geldi bana.

10 Son düzenleyen, cetinbasoz (22.06.2009 19:23:40)

Re: fox içinden c#

XML ile oldukca hizli oluyor.  Anladigim sorunun halloldu, dogru mu?

String array yerine "v1, v2, ..." gibi virgulle ayrilmis seri gonderip Split ile array'e dondurmekte olur.

11

Re: fox içinden c#

çözüldü çok sağol.

basit işlerde parametre göndermek mantıklı ve daha hızlı
büyük data ların olduğu  yapılarda xml iyi çözüm anladığım kadarı ile hiç de yavaş değil gerçekten.

12

Re: fox içinden c#

data çok büyükse xml hem çok yer kaplar hem de yavaştır.

Haksızlıklar karşısında susanlar, dilsiz şeytanlardır!
www.metinemre.com

13

Re: fox içinden c#

Buyuk derken gigabytelarca datadan bahsetmiyoruz. O zaman zaten ne olsa yavas. Onun disinda denemeden emin olma. Yer kaplayacagi dogru ama bu in-process DLL. VFPnin kendi icinde data aktarimi gibi. Aslinda sadece pointer aktariyor sanirim. Herhalde kullanilacagi data da tas catlasa 10-15 Mb filandir. VFP'nin string fonksiyonlarindan bile kimse sikayetci degilken bundan mi sikayetci olacagiz:)

14

Re: fox içinden c#

denedim. gigabayt'a gerek yok. .txt olarak 1 mb olan bir dosya xml ile 10 katına çıkıyor. bu tür 50-100 dosyayı arka arkaya işlersen farkediyor. xml'nin özelliği universal olması. eğer mümkünse düz .txt kesinlikle daha hızlı.

Haksızlıklar karşısında susanlar, dilsiz şeytanlardır!
www.metinemre.com