Picproje Elektronik Sitesi

PROGRAMLAMA DİLLERİ => Visual C# => Konuyu başlatan: Mucit23 - 02 Ocak 2017, 16:32:42

Başlık: C# 'da database nasıl oluşturulur?
Gönderen: Mucit23 - 02 Ocak 2017, 16:32:42
Selamlar

Konu başlığında database dedim ama aslında bana tam olarak ne lazım bilmiyorum. İhtiyacım olan şudur. Donanım tarafından C#daki yazılımıma veriler geliyor. Veri sayısının ne kadar olduğu belli değil ama her gelen ver paketinin uzunluğu ve içeriği belli. Paketin  64 adet int değerden oluşuyor. Fakat bu paketlerden kaç adet olduğu bellirli değil.

Ben c# tarafındaki yazılımıma verileri çek dediğim anda bu verileri c# da bir veri tabanına kaydetmem gerekiyor. Tekrar veri al butonuna basarsam ilk önce veri tabanındaki eski verileri silip yerine yeni verileri yazmam gerekiyor.

Şöyle bir tablo oluştursam güzel olur.

1.   125 456 345 765 875 .....  toplam 64 adet değer
2.   346 656 346 576 467 .....  toplam 64 adet değer
.
.
.
.
n.   346 565 343 244 353 .....  toplam 64 adet değer


Böyle bir işlem için ne tür bir depolama kullabilirim? Daha önce hiç uğraşmadım dolayısıyla bana tam olarak ne lazım bilmiyorum.



Başlık: Ynt: C# 'da database nasıl oluşturulur?
Gönderen: muhittin_kaplan - 02 Ocak 2017, 16:35:44
text, binary, access,sqlserver diyerek gider.
Başlık: Ynt: C# 'da database nasıl oluşturulur?
Gönderen: Mucit23 - 02 Ocak 2017, 16:37:54
hocam text derken txt file oluşturup ona mı kaydedeyim?
Başlık: Ynt: C# 'da database nasıl oluşturulur?
Gönderen: muhittin_kaplan - 02 Ocak 2017, 16:42:15
csv olabilir o konuda, ama ben olsam localde access de tutardım.
(burada n in limiti önemli)
Başlık: Ynt: C# 'da database nasıl oluşturulur?
Gönderen: Mucit23 - 02 Ocak 2017, 16:48:27
en şimdilik en fazla 3000 olur diyelim. Ama galiba txt işimi görecek.
Başlık: Ynt: C# 'da database nasıl oluşturulur?
Gönderen: muhittin_kaplan - 02 Ocak 2017, 17:35:06
access db daha iyi olur eğer c# kullanacaksan
Başlık: Ynt: C# 'da database nasıl oluşturulur?
Gönderen: Mucit23 - 03 Ocak 2017, 11:41:00
Abi şimdilik Text dosyası ile yapmaya çalıştım. Az çok başardım da ama bir sorun var. Seri Port'dan sürekli veri geliyor. Ben bu verileri geldiği gibi txt dosyasının içerisine alt alta dizmem gerekiyor.

serialPort1_DataReceived olayının içerisinde en son gelen satırı okuyorum. Bu satırı bir delegate fonksiyon içerisinde daha önce oluşturmuş olduğum bir txt dosyasının içine yazıyorum.


        private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            RxString = serialPort1.ReadLine();
            BeginInvoke(new delegateG(RecieveData));
        }

        public void RecieveData()
        {
            FileStream folder = new FileStream(ProjectFolder, FileMode.Open, FileAccess.Write);
            StreamWriter Dosya = new StreamWriter(folder);
            Dosya.WriteLine("Test 1223");
            Dosya.WriteLine(RxString);
            Dosya.Flush();
            Dosya.Close();
        }


Sorun şu. Yazma işleminde sıkıntı yok fakat serialPort1.ReadLine(); fonksiyonu bana en sonki gelen paketi sadece gönderiyor. Ondan önce gelen paketler kayboluyor. txt dosyasının içine baktığımda ise sadece en son gelen paketi görüyorum.

Burada sorun nedir? Bu işlemi doğru bir şekilde nasıl yapabilirim?
Başlık: Ynt: C# 'da database nasıl oluşturulur?
Gönderen: vitruvius - 03 Ocak 2017, 12:50:14
Eğer dosyanın sonuna veri eklemek istiyorsan FileMode (https://msdn.microsoft.com/en-us/library/system.io.filemode(v=vs.110).aspx) enumerator'larından FileMode.Append'i kullanmalısın.

Ancak yazma işlemi yaparkan using kullan, bu çok daha kolayına gelir.


using (StreamWriter file = new StreamWriter(fullPath, true))
{
  file.WriteLine(line);
}


Exception'ları kendin yakalarsın.

fullPath dediğim dosyanın gerçek path'i, dosya adı ve uzantısı dahil. İkinci bool parametre ise append, true olunca dosyanın sonuna ekler.
Başlık: Ynt: C# 'da database nasıl oluşturulur?
Gönderen: muhittin_kaplan - 03 Ocak 2017, 14:17:01
Vitvirus cevabi vermis,dosyayi write mod da acmissin. Her yazdihinizda yeni bir dosya gibi ele alir. Append mode gelen veriyi en sona ekler.  Sonunda \n varsa yeni satira atar.
Başlık: Ynt: C# 'da database nasıl oluşturulur?
Gönderen: Mucit23 - 03 Ocak 2017, 17:01:18
Teşekkürler. Şimdi okuldayim ama en kisa zamanda deneyecegim.

Hocam  yalniz using ile tanımladığınız  fonksiyonu anlayamadim. C# çok az biliyorum  bahsettiginiz fonksiyonu nasıl kullanırım ?
Başlık: Ynt: C# 'da database nasıl oluşturulur?
Gönderen: vitruvius - 03 Ocak 2017, 19:28:44
İşte yazdığım gibi kullanacaksın =)

Using (https://msdn.microsoft.com/en-us/library/yh598w02.aspx)'in esas amacı işi bittiğinde objeleri Dispose etmesidir. Yani senin kodundaki gibi .Close() fonksiyonlarını falan çağırmana gerek kalmaz. Hatta dediğim gibi exception yakalarken de bununla uğraşmana gerek kalmaz.

Alıntı yapılan: Microsoft - C# Reference (Verdiğim linkten)As a rule, when you use an IDisposable object, you should declare and instantiate it in a using statement. The using statement calls the Dispose method on the object in the correct way, and (when you use it as shown earlier) it also causes the object itself to go out of scope as soon as Dispose is called. Within the using block, the object is read-only and cannot be modified or reassigned.

The using statement ensures that Dispose is called even if an exception occurs while you are calling methods on the object. You can achieve the same result by putting the object inside a try block and then calling Dispose in a finally block; in fact, this is how the using statement is translated by the compiler. The code example earlier expands to the following code at compile time (note the extra curly braces to create the limited scope for the object):

Fonksiyona gelince:

StreamWriter (https://msdn.microsoft.com/en-us/library/system.io.streamwriter(v=vs.110).aspx) class'ını kullandık. TextWriter kullanarak bir belgeye yazı yazıyor. Detaylarına verdiğim linkten bakabilirsin.

Benim kullandığım Constructor (https://msdn.microsoft.com/en-us/library/36b035cb(v=vs.110).aspx)'ı aşağıdaki yapıda:

public StreamWriter(
string path,
bool append
)


path: Yazacağın belgenin komple path'i (Belge ismi ve uzantısı dahil). Misal: "C:\\Users\\mucit23\\Documents\\deneme.txt"
append: True: Belgenin sonuna yazar. False: Belgeyi sıfırdan yazar.

WriteLine(string) (https://msdn.microsoft.com/en-us/library/7ack4zyt(v=vs.110).aspx) de StreamWrite ile oluşturduğun belgeye gönderdiğin stringi yazıyor arkasına da satır sonlandırıcıyı koyuyor. Unix playformlarda \n , Unix olmayan platformlarda \r\n .

Yani aşağıdaki fonksiyonu kullanabilirsin.


using System.IO;

/// <summary>
/// Writes one line to the given file.
/// </summary>
/// <param name="filePath">File path, WITHOUT the file name.</param>
/// <param name="fileName">File name, WITHOUT the extension. Extension will be .txt</param>
/// <param name="line">Line to be written.</param>
/// <returns>True: Write successful, False: Write unsuccessful, see the error log.</returns>
public static bool writeOneLineToFile(string filePath, string fileName, string line)
{
   string fullPath = Path.Combine(filePath, fileName + ".txt");

   try
   {
      using (StreamWriter file = new StreamWriter(fullPath, true))
      {
         file.WriteLine(line);
      }
      return true;
   }
   catch (DirectoryNotFoundException ex_DirNotFound)
   {
      MessageBox.Show("Oups, directory is not found while writing a file!");
      return false;
   }
}


Oluşması muhtemel diğer exception'ları da sen yakalarsın.
Başlık: Ynt: C# 'da database nasıl oluşturulur?
Gönderen: Mucit23 - 05 Ocak 2017, 09:44:38
@vitruvius Teşekkür ederim sayende hallettim.
Kodu şu şekilde düzenledim.
        public static bool writeOneLineToFile(string filename, string line)
        {
            try
            {
                using (StreamWriter file = new StreamWriter(filename, true))
                {
                    file.WriteLine(line);
                }
                return true;
            }
            catch (DirectoryNotFoundException ex_DirNotFound)
            {
                MessageBox.Show("Oups, directory is not found while writing a file!",ex_DirNotFound.Message);
                return false;
            }
        }


Dediğim gibi c# ile anca ufak tefek işler için uğraşmam gerekiyor. Pek bilmiyorum haliyle. Öğrene öğrene işimi hallediyorum.
Başlık: Ynt: C# 'da database nasıl oluşturulur?
Gönderen: Mucit23 - 06 Ocak 2017, 10:30:02
@vitruvius bir sorunum daha var. Bu konuda da yardımını isteyeceğim yine takılıp kaldım

Hocam TXT dosyası içerisinde sırayla dizmiş olduğum veriyleri okuyup excel'de tabloya aktarmam gerekiyor.
Şuanda Exel dosya yazma işlemlerini hallettim diyebilirim. C# üzerinden excel dosyası oluşturup İstediğim sütüna ve satıra veri yazabiliyorum. Excel dosyası oluşturma işini öğrendim.

Txt dosya okuma işinide yapıyorum. Bunu senin önerdiğin yöntemle yaptım. Txt dosyasından satır satır verileri okuyabiliyorum. Şimdi daha önce konuştuğumuz string parçalama işlemlerini yapmam lazım ama burada takıldım.

Veri okuma ve excele yazmak için aşağıdaki gibi bir public fonksiyon oluşturdum.
        public bool read_and_write_excel()
        {

            string rxdata;
           
            try
            {
                using (StreamReader file = new StreamReader(ProjectFolder, true))
                {
                    rxdata = file.ReadLine();
                    while (rxdata != null)
                    {
                        //string text = rxdata.Split(new char[] { '|', '#' }, StringSplitOptions.RemoveEmptyEntries);  //Burada satır verisi parçalara ayrılacak.

                    }
                }
                return true;
            }
            catch (DirectoryNotFoundException ex_DirNotFound)
            {
                MessageBox.Show("Okuma İşlemi sırasında bir hata oluştu!", ex_DirNotFound.Message);
                return false;
            }

        }


Daha önce bu işi devC de yapmıştık. Aslında özet olarak aşağıdaki kodları C# da çalışacak şekilde editlemem lazım.
int main ()
{
  char text[265]="1.Deger|607|349|473|758|130|872|744|278|323|109|540|665|492|242|387|803|727|529|340|712|303|469|009|857|760|033|699|378|116|835|097|326|212|667|710|333|379|649|279|021|667|272|793|036|785|245|128|391|294|157|701|353|808|244|568|590|624|296|030|103|322|466|549|224#";
  char *spText;
  spText = strtok (text,"|#");
  while (spText != NULL)
  {
    printf ("%s\n",spText);
    spText = strtok (NULL, "|#");
  }
getch();
  return 0;
}


Şu split fonksiyonunu çözemedim. Bu nasıl çalışıyor. Bu işi en uygun nasıl yaparım?
Başlık: Ynt: C# 'da database nasıl oluşturulur?
Gönderen: muhittin_kaplan - 06 Ocak 2017, 11:25:14
mucit gayet basit çalışıyor.

string Text="Deneme;Deneme2;Deneme3;Deneme4;Deneme5";
string[] SplittedText=Text.split(";");



kodu açıklayayım denemedim syntax hatası olabilir.

parametre olarak verilen değer göre böler ve array a atar

console.Writeline(SplittedText[2])
dersem, konsola "deneme3" yazar.
Başlık: Ynt: C# 'da database nasıl oluşturulur?
Gönderen: muhittin_kaplan - 06 Ocak 2017, 11:32:07
Düzeltme

                string s = "there is a cat";
                // Split string on spaces.
                // ... This will separate all the words.
                string[] words = s.Split(' ');
                foreach (string word in words)
                {
                    Console.WriteLine(word);
                }

s string inin içindeki boşluklara göre bölüyor.

public static void Main(string[] args)
        {
                string s = "there is a cat";
                // Split string on spaces.
                // ... This will separate all the words.
                string[] words = s.Split(' ');
                foreach (string word in words)
                {
                    Console.WriteLine(word);
                }

            Console.WriteLine(words[2]);
        }


dediğim gibi de çalışıyormuş.
Başlık: Ynt: C# 'da database nasıl oluşturulur?
Gönderen: vitruvius - 06 Ocak 2017, 11:47:38
Ben cevabı hazırlarken muhittin_kaplan cevap vermiş ama çöpe gitmesin benim yazdıklarım da :)

String.Split (https://msdn.microsoft.com/en-us/library/tabh47cf(v=vs.110).aspx) aşağıdaki gibi tanımlanmış.

public string[] Split(
string[] separator,
StringSplitOptions options
)


separator: Ayırıcılardan oluşan bir string array.
options: İki ihtimalin var:
            StringSplitOptions.RemoveEmptyEntries: boş dönecek dizi elemanlarını engellemek için.
            StringSplitOptions.None: boş dönecek dizi elemanlarını da dahil etmek için.

Return: Belirlediğin ayıraçlarla ayrılmış olan substring'lerden oluşan string array.

İki farklı karakteri baz alıp ayırmak istiyorsan bunları char[] ile tanımla ve Split fonksiyonunun içine bu diziyi koy.

static void Main(string[] args)
{
    string text = "1.Deger|607|349|322|466|549|224#";
    char[] delim = { '|', '#' };  // Ayiraclar.
    string[] subItems = text.Split(delim, StringSplitOptions.None);

    foreach (string line in subItems)
    {
        Console.WriteLine(line);
    }
}


Bunun çıktısı aşağıdaki gibi:

1.Deger
607
349
322
466
549
224
Başlık: Ynt: C# 'da database nasıl oluşturulur?
Gönderen: vitruvius - 06 Ocak 2017, 12:13:18
Bu arada MessageBox.Show()'un ikinci parametresi Caption yani başlıktır.

public static DialogResult Show(
string text,
string caption
)



Benim verdiğim kodda catch bloğundaki bazı kısımları sildim çünkü başka fonksiyonlar v.s. gerektiyor ancak benim yaptığım iş exception olduğunda bunu ayrı bir error.log gibi bir dosyaya kaydederim.

Senin exception yakalama yönteminde yakaladığın hatayı MessageBox.Show()'ın ikinci parametresine aktarıyorsun, bu da hata mesajının başlıkta yazmasına sebep olur. Bu hata mesajları çok uzun olabilir ve balşıkta hoş durmaz. Hatta bunu kullanıcıya yansıtmak da güzel olmaz. Kullanıcıya genel bir "okuma hatası bla bla" gibi bir mesaj verir, esas hata mesajını kendine saklarsın.

Demek istediğim, senin hata yakalama yöntemin şu şekilde çıktı veriyor:

(http://i65.tinypic.com/14tx8xe.png)

Şu şekilde düzenlersen:

catch (DirectoryNotFoundException ex_DirNotFound)
{
     MessageBox.Show("Okuma İşlemi sırasında bir hata oluştu!\nHata mesajı: " + ex_DirNotFound.Message, "Error");
}


Aşağıdaki gibi çıktı alırsın:

(http://i65.tinypic.com/2qmemxd.png)
Başlık: Ynt: C# 'da database nasıl oluşturulur?
Gönderen: vitruvius - 06 Ocak 2017, 14:46:01
Bir şey daha söyleyecektim unuttum.

Exception.Message sadece exception'ın nedenini söyler.

Exception.ToString() ise sana exception'ı her şeyiyle söyler.

Aşağıdaki program parçasına bakalım. Dosyayı okumaya çalışırken exception oluşmasını bekliyorum çünkü verdiğim path benim bilgisayarda yok.

using System;
using System.IO;

namespace mySplitConsole
{
    class Program
    {
        private static void oku()
        {
            try
            {
                string path = @"c:\temp\MyTest.txt";
                using (StreamReader file = new StreamReader(path)) // Burada exception ebkliyorum cunku boyle bir path bende yok.
                {
                    string rxdata = file.ReadLine();
                    while (rxdata != null)
                    {
                        string[] text = rxdata.Split(new char[] { '|', '#' }, StringSplitOptions.RemoveEmptyEntries);  //Burada satır verisi parçalara ayrılacak.
                    }
                }
            }
            catch (DirectoryNotFoundException ex_DirNotFound)
            {
                Console.WriteLine(ex_DirNotFound.Message);
                Console.WriteLine(ex_DirNotFound.ToString());
            }
        }

        static void Main(string[] args)
        {
            oku();
        }
    }
}


Exception.Message sana aşağıdaki gibi bir çıktı verir:
Alıntı YapCould not find a part of the path 'c:\temp\MyTest.txt'.

Exception.ToString() ise:
Alıntı YapSystem.IO.DirectoryNotFoundException: Could not find a part of the path 'c:\temp\MyTest.txt'.
   at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
   at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
   at System.IO.StreamReader..ctor(String path, Encoding encoding, Boolean detectEncodingFromByteOrderMarks, Int32 bufferSize, Boolean checkHost)
   at System.IO.StreamReader..ctor(String path)
   at mySplitConsole.Program.oku() in C:\Users\mucit23\Documents\PicProje\mySplitConsole\mySplitConsole\Program.cs:line 13

Gördüğün gibi ToString() sana çok daha detaylı bilgi veriyor. Son satırına lütfen dikkat et. Exception'ın hangi dosyadan, hangi fonksiyondan ve hangi satırdan geldiğini sana söylüyor.

Dediğim gibi kullanıcıya bunu yansıtmak çok hoş olmaz. Çok istersen Exception.Message'ı yansıtabilirsin. Ama kendin için bir log oluşturmak istiyorsan bunun için Exception.ToString() kullanmanı şiddetle tavsiye ederim.
Başlık: Ynt: C# 'da database nasıl oluşturulur?
Gönderen: controller - 06 Ocak 2017, 15:12:07
Bence SQLITE kullan, dosya işlemleriyle uğraşmazsın. SQL sorguları ile tüm işini halledersin.
Başlık: Ynt: C# 'da database nasıl oluşturulur?
Gönderen: Mucit23 - 06 Ocak 2017, 21:08:13
@vitruvius ve Muhittin hocam cevaplarınız için teşekkür ederim.
Yaptığım uygulama profesyonel bir uygulama değil bu yüzden basit çözümler ile ilgileniyorum. TXT dosyası fazlasıyla işimi görüyor.

Hocam Message Box'ları düzenledim. Bunun için ayrıca teşekkür ederim. Çok vakit harcıyorsunuz.

Şimdi Split işlemini anladım. Fakat işlem sonucundaki string parçaları bir textbox'a yazamadım.

string[] ile string arasında ne fark var?

Split işlemi kullanabilmek için string[] şeklinde tanımlama yapmak gerekiyor.

Textbox içerisine bir string göndermek için string şeklinde tanımlama yapmak gerekiyor.

Aşağıdaki kullanımların hepsinde hata veriyor.
string[] yazi="Merhaba" 
textbox1.text=yazi;     
string text = rxdata.Split(new char[] { '|', '#' }, StringSplitOptions.RemoveEmptyEntries);

Sırayla SD karttan satır okuyup Parçalayıp excel'e yazmak için düzgün bir algoritma kurmam lazım.

Birde Şu konsol bende açılmıyor. Bunu açmak için birkaç ayar varmış. Output Mode'yi değiştirmek gerekiyor fakat ozamanda yaptğım tasarım açılmıyor. İkisini aynı anda kullanabiliyormuyuz?
Başlık: Ynt: C# 'da database nasıl oluşturulur?
Gönderen: Mucit23 - 06 Ocak 2017, 21:17:20
Yahu diziymiş ya.  :o String dizileri olduğunu unutmuşum. Bu durumda benim benim stringlerim text[0], text[1], text[2].....
Başlık: Ynt: C# 'da database nasıl oluşturulur?
Gönderen: vitruvius - 06 Ocak 2017, 23:35:51
Alıntı yapılan: Mucit23 - 06 Ocak 2017, 21:08:13
Birde Şu konsol bende açılmıyor. Bunu açmak için birkaç ayar varmış. Output Mode'yi değiştirmek gerekiyor fakat ozamanda yaptğım tasarım açılmıyor. İkisini aynı anda kullanabiliyormuyuz?

Project -> Properties -> Application -> Output Type -> Console Application

Böyle yaparsan programı çalıştırdığında hem konsol açılır hem de form. Ama hoş bir görüntü değil. Eğer sırf burada verilen örnekleri denemek istiyorsan MessageBox'a da yazdırabilirsin.

Bu arada MessageBox demişken :) MessageBox.Show'un üçüncü ve dördüncü parametrelerine de bakarsan çok daha şık bir MessageBox'ın olur :) Dördüncü ve beşinci parametrelere de bir göz gezdirebilirsin :)

MessageBox.Show("Do you really want to delete this file?", "Warning", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2);

(http://i63.tinypic.com/2j5l9wn.png)
Başlık: Ynt: C# 'da database nasıl oluşturulur?
Gönderen: Mucit23 - 06 Ocak 2017, 23:47:54
Hocam teşekkür ederim. Sizi yakalamışken  :) bugünkü son sorum savefiledialog ile ilgili.

Savefilediyalog da bir dosya oluşturduğumuzda ilk önce aynı isimde başka dosya varmı ona bakıyor. Var ise yenisi ile değiştireyimmi diye soruyor. Bende de durum aynı şekilde buraya kadar problem yok. Fakat ben eskisi ile değiştir dediğimde, değiştirmeyip verilerimi eski dosyanın üzerine yazıyor sistem. Bu neden olur?
Başlık: Ynt: C# 'da database nasıl oluşturulur?
Gönderen: vitruvius - 07 Ocak 2017, 00:04:57
Örnek bir kod parçası alalım mı?  :)
Başlık: Ynt: C# 'da database nasıl oluşturulur?
Gönderen: Mucit23 - 07 Ocak 2017, 00:40:19
Hocam daha çok eksiğim var bu c# konusunda.

Örneğin aşağıdaki kod parçacığından savefiledialog ile bir txt dosyası oluşturuyorum.
                saveFileDialog1.Filter = "Text Files | *.txt";
                saveFileDialog1.Title = "Kayıt Yeri";
                saveFileDialog1.DefaultExt = "txt";
                DialogResult result = saveFileDialog1.ShowDialog();
               
                if (result == DialogResult.OK)
                {
                    ProjectFolder = saveFileDialog1.FileName;
                    textBox2.Text = ProjectFolder;
                    FileStream folder = new FileStream(ProjectFolder, FileMode.CreateNew, FileAccess.ReadWrite);
                    StreamWriter Kaydet = new StreamWriter(folder);
                    Kaydet.Close();
                }
Başlık: Ynt: C# 'da database nasıl oluşturulur?
Gönderen: vitruvius - 07 Ocak 2017, 01:58:40
SaveFileDialog çok hakim olduğum bir konu değil ama MSDN'den bakınca önce bir OpenFile() yapmak gerektiğini anladım.

Aşağıdaki gibi kullanırsan bir sıkıntı olmamalı.

private void button1_Click(object sender, EventArgs e)
{
    Stream myStream;           
    saveFileDialog1.DefaultExt = "txt";

    string[] lines = { "First line", "Second line", "Third line" };

    if (saveFileDialog1.ShowDialog() == DialogResult.OK)
    {
        if ((myStream = saveFileDialog1.OpenFile()) != null)
        {
            myStream.Close();  // Dosyaya yazmak icin once kapamak gerekiyor.

            using (StreamWriter file = new StreamWriter(saveFileDialog1.FileName))
            {
                foreach (string line in lines)
                {
                    file.WriteLine(line);
                }
            }
        }
    }
}


Dosyayı bir kere oluştur ve içine bak. string[] lines'daki elemanlar olacak. Sonra string lines[]'ın elemanlarını değiştir ve butona tıklayığ aynı dosyayı seç. Göreceksin ki üzerine sıfırdan yazacak.
Başlık: Ynt: C# 'da database nasıl oluşturulur?
Gönderen: Mucit23 - 07 Ocak 2017, 11:32:04
Vitruvius teşekkürler savefiledialog işini hallederim artık. Dün bir sorun ile karşılaştım ama çözemedim. Şimdi tekrar bakıyorum.
text dosyasından okuyup excel'e yazmak için aşağıdaki gibi bir fonksiyon oluşturmuştum.

        public bool read_and_write_excel()
        {

            string rxdata;
            int rowCnt = 0;

            try
            {
                using (StreamReader file = new StreamReader(ProjectFolder, true))
                {
                    rxdata = file.ReadLine();
                    rowCnt = 1;
                    while (rxdata != null)
                    {
                        string[] text = rxdata.Split(new char[] { '|', '#' }, StringSplitOptions.RemoveEmptyEntries);
   
                        for (int i = 0; i < 65; i++)
                        {
                            Excel.Range bolge = (Excel.Range)ExcelSayfa.Cells[rowCnt, i+1];
                            bolge.Value2 = text[i];
                        }

                        rxdata = file.ReadLine();
                        rowCnt++;
                    }
                }
                return true;
            }
            catch (DirectoryNotFoundException ex_DirNotFound)
            {
                MessageBox.Show("Okuma İşlemi sırasında bir hata oluştu!\nHata mesajı: " + ex_DirNotFound.Message, "Error");
                return false;
            }

        }


Split işlemi sorununda 65 adet string parçacığı oluşuyor. Benim bunları excel'deki ilgili hücrelere yazmam lazım. yukarıdaki kodu çalıştırdığımda aşağıdaki satırda hata veriyor

bolge.Value2 = text;

Verdiği hata mesajı : Dizin, dizi sınırlarının dışındaydı

buradan şunu anlıyorum. text diye bir dizi yok. Yada split işlemi çalışmıyor yada 65 adet dizi elemanı oluşmuyor.

text isimli dizinin elemanlarını bir textbox'a yazsamda aynı sorun oluyor. . TXT dosyasında okuduğum satır ise düzgün bir şekilde okunuyor. rxdata istediğim formatta geliyor.

Sorun ne olabilir sizce?
Başlık: Ynt: C# 'da database nasıl oluşturulur?
Gönderen: vitruvius - 07 Ocak 2017, 12:47:35
Dün akşam söylemeyi unuttum, bu aralar bir unutkanlık var :)

FileStream folder = new FileStream(ProjectFolder, FileMode.CreateNew, FileAccess.ReadWrite);

Dersen, eğer dosya zaten varsa exception oluşturması lazım. En azından ben dün akşam denerken öyleydi. Onun yerine FileMode.OpenOrCreate şeklinde yap o yapıyı kullanacaksan.

------------------------------------------------------------------------------------------------------------------

Evet aldığın exception bir dizinin var olmayan elemanına ulaşmak istediğinde oluşan bir exception türü. Mesela:

string[] myText = { "bu bir", "bu iki" };

for (int i = 0; i < 3; i++)
{
     MessageBox.Show(myText[i]);
}


Dersen, myText[2]'ye de erişmeye çalışacaktır kod. Ancak bizim dizimizin boyutu o kadar değil, öyle bir eleman da yok.

Onun yerine:

for (int i = 0; i < myText.Count(); i++)
{
     MessageBox.Show(myText[i]);
}


Dersen dizinin boyutu kadar döngüye girersin.

Excel ile ilgili tanımlamalarını da verirsen daha detaylı bakarız akşam.
Başlık: Ynt: C# 'da database nasıl oluşturulur?
Gönderen: PROTECH_ - 07 Ocak 2017, 13:45:24
LOCAL DATABASE kullan


https://www.youtube.com/watch?v=1EpYqtSlOr8
Başlık: Ynt: C# 'da database nasıl oluşturulur?
Gönderen: muhittin_kaplan - 07 Ocak 2017, 14:11:21
yeri gelmişken söyleyeyim,
eğer verilerinizin multiplatform olmasını istiyorsanız (linux, win, mac) ve bir çok program tarafından açılmasını, webde yayaınlamak vs istiyorsanız XML yapın.
Başlık: Ynt: C# 'da database nasıl oluşturulur?
Gönderen: Mucit23 - 07 Ocak 2017, 17:57:29
Hocam

Excelde tablo oluşturmak için bu web sitesinden faydalandım.
http://www.tugayarslan.com/blog/c-ile-excele-hukmedin-1-dokuman-olusturma-yazma-kaydetme/

Kayıt yapabilmek için bir buton ekleyip ilk önce savefile dialog ile kayıt yerini seçiyorum
        private void button2_Click(object sender, EventArgs e)
        {
            string kayit_yeri="";

            try//İlk başta kayıt yerimizi seçelim.
            {
                saveFileDialog1.Filter = "xlsx Files | *.xlsx";
                saveFileDialog1.Title = "Kayıt Yeri";
                saveFileDialog1.DefaultExt = "xlsx";
                DialogResult result = saveFileDialog1.ShowDialog();

                if (result == DialogResult.OK)
                {
                    kayit_yeri = saveFileDialog1.FileName;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Bir hata oluştu!", ex.Message);
            }

            read_and_write_excel(); //Excel tablomuzu dolduralım.

            if (kayit_yeri != "")
            {
                ExcelProje.SaveAs(kayit_yeri, Excel.XlFileFormat.xlWorkbookDefault, Missing, Missing, false, Missing, Excel.XlSaveAsAccessMode.xlExclusive);
                ExcelProje.Close(true, Missing, Missing);
                ExcelUygulama.Quit();

                MessageBox.Show("Dosya Başarıyla Kaydedildi.");
            }
            else
            {
                MessageBox.Show("Lütfen Bir Dosya Adı Giriniz.");
            }
        }

Kayıt yeri seçildikten sonra read_and_write_excel(); fonksiyonuna gidip txt dosyasının içini okuyup excel dosyasını dolduruyorum.
o fonksiyonun içeriğide aşağıdaki gibi.

        public bool read_and_write_excel()
        {

            string rxdata;
            int row = 0;

            try
            {
                using (StreamReader file = new StreamReader(ProjectFolder, true))
                {
                    rxdata = file.ReadLine();
                    row = 1; //1. Satırdan başlayacağız
                    while (rxdata != null)
                    {
                        string[] parts = rxdata.Split(new char[] { '|', '#' }, StringSplitOptions.RemoveEmptyEntries);

                        for (int i = 0; i < parts.Count(); i++)
                        {
                            Excel.Range bolge = (Excel.Range)ExcelSayfa.Cells[row, i+1];
                            bolge.Value2 = parts[i];
                        }
   
                        rxdata = file.ReadLine();
                        row++; //Satır indisimizi 1 arttırıyoruz.
                    }
                }
                return true;
            }
            catch (DirectoryNotFoundException ex_DirNotFound)
            {
                MessageBox.Show("Okuma İşlemi sırasında bir hata oluştu!\nHata mesajı: " + ex_DirNotFound.Message, "Error");
                return false;
            }

        }


Önceden hiç çalışmıyordu fakat şuan o sorunu çözdüm tablo oluşturuluyor fakat buradaki koda göre exelde 1 satır atlayarak tabloyu dolduruyor. Bu sorunu anlamıyorum. Şimdide bununla uğraşıyorum.

Benim verilerim TXT dosyasında aşağıdaki gibi dizili. Burada hiç sıkıntı yok. Fakat bunu excel'e aktarırken problem yaşıyorum.
1.Deger|607|349|473|758|130|872|744|278|323|109|540|665|492|242|387|803|727|529|340|712|303|469|009|857|760|033|699|378|116|835|097|326|212|667|710|333|379|649|279|021|667|272|793|036|785|245|128|391|294|157|701|353|808|244|568|590|624|296|030|103|322|466|549|224#
2.Deger|701|253|477|108|528|133|598|781|835|313|465|814|563|036|725|569|015|394|729|301|317|095|105|404|351|798|588|323|005|682|852|566|016|537|038|144|201|297|371|428|137|458|577|297|894|804|509|731|545|375|435|698|142|799|368|512|360|757|294|208|295|468|113|430#
3.Deger|406|762|142|565|382|352|667|621|495|412|771|101|890|231|338|357|316|290|140|679|035|106|872|298|195|219|354|623|889|860|505|726|423|506|713|170|738|694|420|344|466|034|026|294|763|738|244|790|350|459|223|447|085|217|872|639|047|585|496|085|823|520|644|668#


Bu satırlardan bayağı var. Bu yüzden bu işlemi hızlı yapmam lazım. Ama iki satır veriyi bile parçalayıp excel'e yazma 2-3 sn sürüyor. İşlemler neden bu kadar yavaş oluyorki?

Bu işi en efektif bir şekilde nasıl yaparım? TXT dosyamızın oluşturulmuş olduğunu düşünün. Sadece TXT dosyasından satır okuyup excel'e hızlı bir şekilde atmam lazım. Hatta bu işlemin süresini bir tane progress bar ile göstersem süper olacak.
Başlık: Ynt: C# 'da database nasıl oluşturulur?
Gönderen: vitruvius - 08 Ocak 2017, 02:25:23
Hocam verdiğin kodu denedim ama satır atlamalı yazmadı bende. Sebebini merak ediyorsan projeyi ziple ve bana yolla. Debug eder bakar, sorunu buluruz.

Value2() fonksiyonu son derece pahalı bir fonksiyon. Biraz araştırdım ve buradaki (https://www.codeproject.com/articles/21519/fast-exporting-from-dataset-to-excel) kaynaktan iki boyutlu bir dizi tanımlayıp Value2() fonksiyonunu bir kere çağırıp dizinin tüm içeriğinin yazdırılabildiğini gördüm.

Kendimce bir şeyler karaladım, exception yakalamayı ve birkaç güvenlik kontrolünü sana bıraktım.

OpenFileDialog ile önce verileri okuyacağın dosyayı seçtiriyorum, sonra da yazacağın excel dosyasını seçtiriyorum. Satırların yanlarında açıklama var zaten. Önemli olan yazma operasyonunu anlamak.

İki boyutlu bir dizi var. Dizinin satır kısmı senin de excel'deki satır kısmın olacak. Yani text dosyanda kaç satır varsa o kadar. Sütunları da text dosyasından okuduğun verinin Split() edilmiş hali tek tek eklenecek. Yani büyüklüğü 65 olacak. Yalnız burada bu büyüklüğün sabit olduğundan emin olmak lazım zira diziyi tanımlarken kaç sütun olacağını hesaplayıp tanımlıyoruz ve bunu bir daha değiştiremeyiz. Eğer sütun sayısı değişken ise List<> üzerinden devam etmek gerekir.

Verdiğin örnek text dosyasını 100 satırlık bir dosya yaptım. Tek tek her döngüde value2()'yi çağırıp yazdırmak yaklaşık 75 saniye sürüyor. İki boyutlu dizi kullanıp tek seferde yazdırmak ise yaklaşık 0.475 saniye :)

Tüm kod aşağıda:

using System;
using System.Linq;
using System.Windows.Forms;
using Excel = Microsoft.Office.Interop.Excel;
using System.IO;

namespace myExcel2
{
    public partial class Form1 : Form
    {
        static Excel.Application myExcelApp;
        static Excel.Workbook myExcelWorkbook;
        static Excel.Worksheet myExcelSheet;
        static object Missing = System.Reflection.Missing.Value;
        static Excel.Range myExcelRange;

        public Form1()
        {
            InitializeComponent();
        }

        /// <summary>
        /// Pops-up an OpenFileDialog and lets the user select a file.
        /// </summary>
        /// <param name="title">String: Title of OpenFileDialog.</param>
        /// <param name="fileType">String: File type that the user is going to select. Ex: Text file.</param>
        /// <param name="fileExtension">String: File extension WITH the dot in the beginning.</param>
        /// <returns>Null: If nothing is selected. String: Full file path including file name and extension.</returns>
        private static string selectFile(string title, string fileType, string fileExtension)
        {
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Title = title;
            ofd.Filter = fileType + "|*" + fileExtension;

            if (ofd.ShowDialog() == DialogResult.OK)
            {
                return ofd.FileName;
            }
            else
            {
                return null;
            }
        }

        /// <summary>
        /// Reads all lines of the given file.
        /// </summary>
        /// <param name="fullPath">String: Full file path, including the name and extension of the file.</param>
        /// <returns>Null: If file doesn't exist. String[]: Lines of the given file.</returns>
        private static string[] readAllLines(string fullPath)
        {
            if (File.Exists(fullPath))
            {
                return File.ReadAllLines(fullPath);
            }
            else
            {
                return null;
            }
        }

        /// <summary>
        /// Writes data to the given excel file.
        /// </summary>
        /// <param name="fullPath">String: Full file path, including the name and extension of the file.</param>
        /// <param name="allLines">String[]: Data to be written.</param>
        /// <returns>True: Write operation is successful.</returns>
        private static bool writeToExcel(string fullPath, string[] allLines)
        {
            if (File.Exists(fullPath))
            {               
                int height = allLines.Count();  // Number of rows.
                int width = allLines[0].Split(new char[] { '|', '#' }, StringSplitOptions.RemoveEmptyEntries).Count(); // Number of columns.

                Excel.Range top = myExcelSheet.Cells[1, 1]; // Start position.
                Excel.Range bottom = myExcelSheet.Cells[height, width]; // End position.
                Excel.Range all = myExcelSheet.get_Range(top, bottom);

                string[,] myList = new string[height, width];   // A 2D array to hold data.

                for (int i=0; i<height; i++)
                {
                    string[] items = allLines[i].Split(new char[] { '|', '#' }, StringSplitOptions.RemoveEmptyEntries);

                    for (int j = 0; j < width; j++)
                    {
                        myList[i, j] = items[j];    // Insert the data.
                    }
                }
                all.Value2 = myList;    // Write data into the excel file.
                return true;
            }
            else
            {
                return false;
            }
        }

        /// <summary>
        /// Saves the given excel file.
        /// </summary>
        /// <param name="fullPath">String: Full file path, including the name and extension of the file.</param>
        /// <returns>True: Save operation is successful.</returns>
        private static bool saveExcelFile(string fullPath)
        {
            if (File.Exists(fullPath))
            {
                myExcelApp.DisplayAlerts = false;  // If turned on, overwrite message will pop-up.
                myExcelWorkbook.SaveAs(fullPath, Excel.XlFileFormat.xlWorkbookDefault, Missing, Missing, false, Missing, Excel.XlSaveAsAccessMode.xlNoChange);
                myExcelWorkbook.Close(true, Missing, Missing);
                myExcelApp.Quit();
                return true;
            }
            else
            {
                return false;
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            myExcelApp = new Excel.Application();
            myExcelWorkbook = myExcelApp.Workbooks.Add(Missing);
            myExcelSheet = (Excel.Worksheet)myExcelWorkbook.Worksheets.get_Item(1);
            myExcelRange = myExcelSheet.UsedRange;
            myExcelSheet = (Excel.Worksheet)myExcelApp.ActiveSheet;

            myExcelApp.Visible = false;
            myExcelApp.AlertBeforeOverwriting = false;

            string sourceFilePath = selectFile("Please select your source file.", "Text file", ".txt"); // Select the source file.
            string destinationPath = null;
            string[] allLinesFromSource = null;

            if (sourceFilePath != null)
            {
                allLinesFromSource = readAllLines(sourceFilePath);  // Read the file.

                if (allLinesFromSource != null)
                {
                    destinationPath = selectFile("Please select your target file.", "Excel File", ".xlsx"); // Target excel file.

                    if (destinationPath != null)
                    {
                        if (writeToExcel(destinationPath, allLinesFromSource)) // Write.
                        {
                            if (saveExcelFile(destinationPath))
                            {
                                MessageBox.Show("Successfully written&saved.", "Done", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                Close();    // Close the application.
                            }
                            else
                            {
                                MessageBox.Show("An error happened while saving the file.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                Close();    // Close the application.
                            }
                        }
                    }
                }
            }
        }
    }
}

Başlık: Ynt: C# 'da database nasıl oluşturulur?
Gönderen: Mucit23 - 08 Ocak 2017, 10:17:13
Hocam benim 2000 3000 satırı problemsiz yapabilmem gerek. Aslında Excel'e aktarma işlemi benim için lüks gibi birşey. normalde Excel'de benim yazılım olmadan verileri tabloya döküyorum. Önceliğim Txt dosyası oluşturmaktı. Onu yaptım gibi. Fakat Excel işinide halletsem mükemmel olacak.

Hocam dünden beri uğraşıyorum ama satır atlayarak kaydetme işini çözemedim. Biraz işin derinliklerine girdiğimde aşağıdaki döngü içerisinde row değişkeninin daha olması gerekenden dahada çok arttığını görüyorum.
                   
while (rxdata != null)
                    {
                        string[] parts = rxdata.Split(new char[] { '|', '#' }, StringSplitOptions.RemoveEmptyEntries);

                        for (int i = 0; i < parts.Count(); i++)
                        {
                            Excel.Range bolge = (Excel.Range)ExcelSayfa.Cells[row, i+1];
                            bolge.Value2 = parts[i];
                        }
   
                        rxdata = file.ReadLine();
                        row++; //Satır indisimizi 1 arttırıyoruz.
                    }

Normalde Txt dosyasında iki satır veri var ama program döngüden çıktığında row değişkeni 5 civarı değer alıyor.  Yani anlam  veremedim hocam projeyi aşağıdaki linke yükledim. Müsait bir zamanında incelerseniz ve diğer hataları görüp söylerseniz çok memnun olurum.
https://yadi.sk/d/a1gqHb8537iNWn

Value2 fonksiyonuna pahalı demişsiniz  :D Tam anlayamadım demek istediğinizi

Hocam sizin anlattığınızda şöylemi yapmam gerekiyor. Excel'le göndermeden önce Bütün TXT dosyasını split edip iki boyutlu bir diziye önce kaydedip sonra excel'e göndereceğim. Böyle olursa eğer 2000 satır veri olsa 2000*64 toplam 128000 adet veri yapar. Bunu dizide tutmak bilgisayarı çok kasmaz mı?

Excel'de bu işlem çok hızlı gerçekten. o kadar hızlı olmasada 5-6 saniye içerisinde bu işi yapsam süper olur  :)
Başlık: Ynt: C# 'da database nasıl oluşturulur?
Gönderen: serdararikan - 08 Ocak 2017, 13:19:53
Neden aldığın verileri list içerisine yazmiyorsun?
Başlık: Ynt: C# 'da database nasıl oluşturulur?
Gönderen: vitruvius - 11 Ocak 2017, 16:55:47
Satır atlamalı yazdırma olayı bende gerçekleşmedi. Dolayısı ile debug edemedim.

Verinin 65 parçadan oluşacağını garanti edebiliyor musun? Edebilsen bile List<> ile çalışmak daha kolaylık sağlayacaktır ama sen bilirsin.

Value2() fonksiyonu zaman alan bir fonksiyon dolayısı ile mümkün olduğunca az çağırmak programı oldukça hızlandıracaktır. Senin yaptığın gibi dizinin her elemanı için bu fonksiyonu tek tek çağırmak yerine verdiğim örnekteki gibi iki boyutlu bir dizi kullanıp bir kere çağırırsan programın son derece hızlanacaktır. Rakamları verdim :P

Verdiğim örneği bir dene ve performansını gör. Bütün proje kodu var orada. Her şey Form1_Load() içinde gerçekleşiyor herhangi bir buton, textBox v.s. eklemene gerek yok. 2000 satırlık bir text dosyası seç ve bir bak.
Başlık: Ynt: C# 'da database nasıl oluşturulur?
Gönderen: Mucit23 - 20 Ocak 2017, 13:53:40
Selamlar

Visual Studio ile bir proje hazırladık projemiz dügün çalışıyor vs. Bu projeyi Windows 7 ve üzeri PC lerde düzgün bir şekilde çalışması için ne yapmak gerekir? Sonuç olarak ben bir exe dosyası istiyorum. Virüs programları bu programı kötü niyetli olarak algılamasın. Ve Windows8 ve üzeri x86,x64 olmak üzere her türlü platformda çalışsın istiyorum.
Başlık: Ynt: C# 'da database nasıl oluşturulur?
Gönderen: vitruvius - 20 Ocak 2017, 14:02:27
.NET versiyonun ve Visual Studio versiyonun ne? Setup dosyası oluşturursan sorun olmayacaktır.
Başlık: Ynt: C# 'da database nasıl oluşturulur?
Gönderen: Mucit23 - 20 Ocak 2017, 14:16:49
Hocam NetFramework 4 kurulu bilgisayarımda Ayrıca VS 2010 kullanıyorum.

Debug klasörü içindek oluşan exe bu durumda işimi görmezmi?
Başlık: Ynt: C# 'da database nasıl oluşturulur?
Gönderen: muhittin_kaplan - 20 Ocak 2017, 14:25:02
hocam normalde görür, ama olurda freamework yüklü değildir felan durumu olursa diye setup hazırlamak iyidir.
https://www.youtube.com/watch?v=aUctlCNoX64