Verileri MSSQL'de oluşturmaktan ziyade JSON'da oluşturup ardından MSSQL Serverları ile çekmekten bahsediyorum.Neden önce MSSQL'e aktarıyorsun bilmiyorum ama tabii.
Kurduğun cümle diyor ki; "JSON verimi önce MSSQL'e aktaracağım, sonra MSSQL'den C#'a çekeceğim."Verileri MSSQL'de oluşturmaktan ziyade JSON'da oluşturup ardından MSSQL Serverları ile çekmekten bahsediyorum.
Datayı JSON'da oluşturup, database'e aktarabilirsin. JSON Parser ile parse edip, daha sonrasında, parse ettiğin datayı sql sorguna bind edip göndereceksin.Mesela JSON'da yazdığım verileri MSSQL'e aktarıp oradan C#'a çekebilir miyim?
Evet çok basit. İstersen örnek atabilirim.Soru yukarıdaki gibi. Bunu nasıl yapabilirim? Mesela JSON'da yazdığım verileri MSSQL'e aktarıp oradan C#'a çekebilir miyim?
Veriyi JSON'da oluşturmak çok daha basit geldi bana o yüzden. Oluşturduğum veriyi, veri tabanı olan MsSQL'de tutacağım. MsSQL'de veri oluşturmak karışık geldi bana.Kurduğun cümle diyor ki; "JSON verimi önce MSSQL'e aktaracağım, sonra MSSQL'den C#'a çekeceğim."
Bende diyorum ki, neden önce MSSQL'e aktarıp sonra uygulamada kullanmak için bir daha çekiyorsun? Ha yok amaç zaten JSON gelen datayı, db'ye aktarmaksa, evet, yapabilirsin. Aşağıda açıklarım.
Datayı JSON'da oluşturup, database'e aktarabilirsin. JSON Parser ile parse edip, daha sonrasında, parse ettiğin datayı sql sorguna bind edip göndereceksin.
Olur, atarsan çok sevinirim.Evet çok basit. İstersen örnek atabilirim.
Sanırım direkt JSON'dan çekilebiliyormuş. bu videoda öyle gösteriyor ama bilmiyorum tam. MsSQL'e ihtiyacım var mı her türlü? Amacım bir projem var kim milyoner olmak ister tarzında. Veri tabanında 100 soru saklayacağım ortalama ve C#'a da oyuncunun olduğu para seviyesinin zorluğuna göre soruları oluşturmuş olduğum veri tabanından çekmek. Bunun yanında oyunu oynayan kişinin "İstatistikler" adında bir yerde oynadığı oyunların kayıtlarını görmesini sağlamak.Mesela işte oynanan oyun sayısı 5, en son oynanan oyunda 4. soruda elenmiş gibisinden istatistikler. 2 Tane veri tabanına ihtiyacım var yani.Soru yukarıdaki gibi. Bunu nasıl yapabilirim? Mesela JSON'da yazdığım verileri MSSQL'e aktarıp oradan C#'a çekebilir miyim?
100 soruyu veri tabanında saklamana gerek yok. JSON olarak saklaman daha kolay olur. He insanların hile yapması kolay olur ama zaten client-side executable dağıttığın her şeyde hile ihtimali var.bu videoda öyle gösteriyor ama bilmiyorum tam. MsSQL'e ihtiyacım var mı her türlü? Amacım bir projem var kim milyoner olmak ister tarzında. Veri tabanında 100 soru saklayacağım ortalama ve C#'a da oyuncunun olduğu para seviyesinin zorluğuna göre soruları oluşturmuş olduğum veri tabanından çekmek. Bunun yanında oyunu oynayan kişinin "İstatistikler" adında bir yerde oynadığı oyunların kayıtlarını görmesini sağlamak.Mesela işte oynanan oyun sayısı 5, en son oynanan oyunda 4. soruda elenmiş gibisinden istatistikler. 2 Tane veri tabanına ihtiyacım var yani.
{
"1": {
"soru": "Türkiye'nin başkenti aşağıdakilerden hangisidir?",
"şıklar": {
"a": "Eskişehir",
"b": "İstanbul",
"c": "Ankara",
"d": "Iğdır"
},
"cevap": "c"
},
"2": {
"soru": "Cumhuriyet kaç yılında ilan edilmiştir?",
"şıklar": {
"a": "1453",
"b": "1071",
"c": "1919",
"d": "1923"
},
"cevap": "d"
}
}
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
namespace SoruCevap2
{
public partial class Form1 : Form
{
private JObject sorular;
private class Şık
{
public string? şık, cevap;
public Şık(string Şık, string Cevap)
{
şık = Şık;
cevap = Cevap;
}
}
class Soru
{
public string SoruMetni;
public Şık[] Şıklar;
public string DoğruCevap;
public Soru(JToken? soru)
{
string[] keys = ["soru", "şıklar", "cevap"];
if (soru == null)
return;
foreach(var key in keys)
{
if (soru[key] == null) { throw new ArgumentNullException($"{key} olmalı."); }
switch(key)
{
case "soru":
SoruMetni = (string)soru[key];
break;
case "şıklar":
Şıklar = ŞıklarıGetir(soru[key]);
break;
case "cevap":
DoğruCevap = (string)soru[key];
break;
}
}
}
private Şık[] ŞıklarıGetir(JToken token)
{
string[] keys = ["a", "b", "c", "d"];
if (token == null) { throw new ArgumentNullException("Şıklar olmalı"); }
Şık[] şıklar = new Şık[4];
int i = 0;
foreach (var key in keys)
{
if (token[key] == null) { throw new ArgumentNullException($"{key} olmalı."); }
şıklar[i++] = new Şık(key, (string)token[key]);
}
return şıklar;
}
}
List<Soru> Sorular;
int soru_index;
public Form1()
{
InitializeComponent();
// BaseDirectory çalıştırılabilirin olduğu konumu veriyor.
// sorular.json'u aynı klasörde araması için yapıyorum bunu.
// Eğer bulamazsa exception atar. Exception handling'i ile kendin ilgilenirsin.
Sorular = new List<Soru>();
using (StreamReader reader = File.OpenText($@"{AppDomain.CurrentDomain.BaseDirectory}\sorular.json"))
{
JObject o = (JObject)JToken.ReadFrom(new JsonTextReader(reader));
foreach(var (soru_indexi, soru_) in o)
{
Sorular.Add(new Soru(soru_));
}
}
Load += FormLoad;
foreach (var control in Controls)
{
if (control.GetType() == typeof(Button))
{
var btn = (Button)control;
btn.Click += ButtonClick;
}
}
soru_index = 0;
; }
public void FormLoad(object? sender, EventArgs e)
{
if (Sorular.Count == 0)
{
return;
}
SoruyuYerleştir(Sorular[soru_index]);
}
void SoruyuYerleştir(Soru soru)
{
label2.Text = soru.SoruMetni;
int i = 0;
foreach (var control in Controls)
{
if (control.GetType() == typeof(Button))
{
var btn = (Button)control;
btn.Text = soru.Şıklar[i].cevap;
btn.Name = soru.Şıklar[i++].şık;
}
}
}
public void ButtonClick(object? sender, EventArgs e)
{
if (sender == null) { return; }
Button button = (Button)sender;
if (button.Name == Sorular[soru_index].DoğruCevap)
{
if(soru_index < Sorular.Count - 1)
{
MessageBox.Show("Doğru bildiniz! Bir sonraki soruya geçelim.");
SoruyuYerleştir(Sorular[++soru_index]);
return;
}
MessageBox.Show("Tüm soruları doğru bildiniz!");
Application.Exit();
}
MessageBox.Show("Üzgünüz, yanlış cevap.");
}
}
}
Veriyi JSON'da oluşturmak çok daha basit geldi bana o yüzden. Oluşturduğum veriyi, veri tabanı olan MsSQL'de tutacağım. MsSQL'de veri oluşturmak karışık geldi bana.
Teşekkür ederim!
Olur, atarsan çok sevinirim.
Sanırım direkt JSON'dan çekilebiliyormuş. bu videoda öyle gösteriyor ama bilmiyorum tam. MsSQL'e ihtiyacım var mı her türlü? Amacım bir projem var kim milyoner olmak ister tarzında. Veri tabanında 100 soru saklayacağım ortalama ve C#'a da oyuncunun olduğu para seviyesinin zorluğuna göre soruları oluşturmuş olduğum veri tabanından çekmek. Bunun yanında oyunu oynayan kişinin "İstatistikler" adında bir yerde oynadığı oyunların kayıtlarını görmesini sağlamak.Mesela işte oynanan oyun sayısı 5, en son oynanan oyunda 4. soruda elenmiş gibisinden istatistikler. 2 Tane veri tabanına ihtiyacım var yani.
Örnek bu. Ayrıca hile yapmayı önlemek için json dosyasını rahatlıkla gizleyebilirsin.100 soruyu veri tabanında saklamana gerek yok. JSON olarak saklaman daha kolay olur. He insanların hile yapması kolay olur ama zaten client-side executable dağıttığın her şeyde hile ihtimali var.
Örneğin;
JSON:{ "1": { "soru": "Türkiye'nin başkenti aşağıdakilerden hangisidir?", "şıklar": { "a": "Eskişehir", "b": "İstanbul", "c": "Ankara", "d": "Iğdır" }, "cevap": "c" }, "2": { "soru": "Cumhuriyet kaç yılında ilan edilmiştir?", "şıklar": { "a": "1453", "b": "1071", "c": "1919", "d": "1923" }, "cevap": "d" } }
Bu şekilde tutarsın dosyada. Sonrasında herhangi bir JSON Parser'ı ile parse edersin.
Basitçe şöyle bir kod yazdım mesela;
Eki Görüntüle 2324969C#:using Newtonsoft.Json; using Newtonsoft.Json.Linq; namespace SoruCevap2 { public partial class Form1 : Form { private JObject sorular; private class Şık { public string? şık, cevap; public Şık(string Şık, string Cevap) { şık = Şık; cevap = Cevap; } } class Soru { public string SoruMetni; public Şık[] Şıklar; public string DoğruCevap; public Soru(JToken? soru) { string[] keys = ["soru", "şıklar", "cevap"]; if (soru == null) return; foreach(var key in keys) { if (soru[key] == null) { throw new ArgumentNullException($"{key} olmalı."); } switch(key) { case "soru": SoruMetni = (string)soru[key]; break; case "şıklar": Şıklar = ŞıklarıGetir(soru[key]); break; case "cevap": DoğruCevap = (string)soru[key]; break; } } } private Şık[] ŞıklarıGetir(JToken token) { string[] keys = ["a", "b", "c", "d"]; if (token == null) { throw new ArgumentNullException("Şıklar olmalı"); } Şık[] şıklar = new Şık[4]; int i = 0; foreach (var key in keys) { if (token[key] == null) { throw new ArgumentNullException($"{key} olmalı."); } şıklar[i++] = new Şık(key, (string)token[key]); } return şıklar; } } List<Soru> Sorular; int soru_index; public Form1() { InitializeComponent(); // BaseDirectory çalıştırılabilirin olduğu konumu veriyor. // sorular.json'u aynı klasörde araması için yapıyorum bunu. // Eğer bulamazsa exception atar. Exception handling'i ile kendin ilgilenirsin. Sorular = new List<Soru>(); using (StreamReader reader = File.OpenText($@"{AppDomain.CurrentDomain.BaseDirectory}\sorular.json")) { JObject o = (JObject)JToken.ReadFrom(new JsonTextReader(reader)); foreach(var (soru_indexi, soru_) in o) { Sorular.Add(new Soru(soru_)); } } Load += FormLoad; foreach (var control in Controls) { if (control.GetType() == typeof(Button)) { var btn = (Button)control; btn.Click += ButtonClick; } } soru_index = 0; ; } public void FormLoad(object? sender, EventArgs e) { if (Sorular.Count == 0) { return; } SoruyuYerleştir(Sorular[soru_index]); } void SoruyuYerleştir(Soru soru) { label2.Text = soru.SoruMetni; int i = 0; foreach (var control in Controls) { if (control.GetType() == typeof(Button)) { var btn = (Button)control; btn.Text = soru.Şıklar[i].cevap; btn.Name = soru.Şıklar[i++].şık; } } } public void ButtonClick(object? sender, EventArgs e) { if (sender == null) { return; } Button button = (Button)sender; if (button.Name == Sorular[soru_index].DoğruCevap) { if(soru_index < Sorular.Count - 1) { MessageBox.Show("Doğru bildiniz! Bir sonraki soruya geçelim."); SoruyuYerleştir(Sorular[++soru_index]); return; } MessageBox.Show("Tüm soruları doğru bildiniz!"); Application.Exit(); } MessageBox.Show("Üzgünüz, yanlış cevap."); } } }
Şöyle de bir arayüz. Rastgele falan getirmek için kendin yaparsın bir şeyler. Üstüne uğraşır kafana göre geliştirirsin. Temeli verdim.
Eki Görüntüle 2324979
Hocam tek kelimeyle şahane. Elinize sağlık, tam da aradığım şey buydu. Çok teşekkür ediyorum gerçekten.100 soruyu veri tabanında saklamana gerek yok. JSON olarak saklaman daha kolay olur. He insanların hile yapması kolay olur ama zaten client-side executable dağıttığın her şeyde hile ihtimali var.
Örneğin;
JSON:{ "1": { "soru": "Türkiye'nin başkenti aşağıdakilerden hangisidir?", "şıklar": { "a": "Eskişehir", "b": "İstanbul", "c": "Ankara", "d": "Iğdır" }, "cevap": "c" }, "2": { "soru": "Cumhuriyet kaç yılında ilan edilmiştir?", "şıklar": { "a": "1453", "b": "1071", "c": "1919", "d": "1923" }, "cevap": "d" } }
Bu şekilde tutarsın dosyada. Sonrasında herhangi bir JSON Parser'ı ile parse edersin.
Basitçe şöyle bir kod yazdım mesela;
Eki Görüntüle 2324969C#:using Newtonsoft.Json; using Newtonsoft.Json.Linq; namespace SoruCevap2 { public partial class Form1 : Form { private JObject sorular; private class Şık { public string? şık, cevap; public Şık(string Şık, string Cevap) { şık = Şık; cevap = Cevap; } } class Soru { public string SoruMetni; public Şık[] Şıklar; public string DoğruCevap; public Soru(JToken? soru) { string[] keys = ["soru", "şıklar", "cevap"]; if (soru == null) return; foreach(var key in keys) { if (soru[key] == null) { throw new ArgumentNullException($"{key} olmalı."); } switch(key) { case "soru": SoruMetni = (string)soru[key]; break; case "şıklar": Şıklar = ŞıklarıGetir(soru[key]); break; case "cevap": DoğruCevap = (string)soru[key]; break; } } } private Şık[] ŞıklarıGetir(JToken token) { string[] keys = ["a", "b", "c", "d"]; if (token == null) { throw new ArgumentNullException("Şıklar olmalı"); } Şık[] şıklar = new Şık[4]; int i = 0; foreach (var key in keys) { if (token[key] == null) { throw new ArgumentNullException($"{key} olmalı."); } şıklar[i++] = new Şık(key, (string)token[key]); } return şıklar; } } List<Soru> Sorular; int soru_index; public Form1() { InitializeComponent(); // BaseDirectory çalıştırılabilirin olduğu konumu veriyor. // sorular.json'u aynı klasörde araması için yapıyorum bunu. // Eğer bulamazsa exception atar. Exception handling'i ile kendin ilgilenirsin. Sorular = new List<Soru>(); using (StreamReader reader = File.OpenText($@"{AppDomain.CurrentDomain.BaseDirectory}\sorular.json")) { JObject o = (JObject)JToken.ReadFrom(new JsonTextReader(reader)); foreach(var (soru_indexi, soru_) in o) { Sorular.Add(new Soru(soru_)); } } Load += FormLoad; foreach (var control in Controls) { if (control.GetType() == typeof(Button)) { var btn = (Button)control; btn.Click += ButtonClick; } } soru_index = 0; ; } public void FormLoad(object? sender, EventArgs e) { if (Sorular.Count == 0) { return; } SoruyuYerleştir(Sorular[soru_index]); } void SoruyuYerleştir(Soru soru) { label2.Text = soru.SoruMetni; int i = 0; foreach (var control in Controls) { if (control.GetType() == typeof(Button)) { var btn = (Button)control; btn.Text = soru.Şıklar[i].cevap; btn.Name = soru.Şıklar[i++].şık; } } } public void ButtonClick(object? sender, EventArgs e) { if (sender == null) { return; } Button button = (Button)sender; if (button.Name == Sorular[soru_index].DoğruCevap) { if(soru_index < Sorular.Count - 1) { MessageBox.Show("Doğru bildiniz! Bir sonraki soruya geçelim."); SoruyuYerleştir(Sorular[++soru_index]); return; } MessageBox.Show("Tüm soruları doğru bildiniz!"); Application.Exit(); } MessageBox.Show("Üzgünüz, yanlış cevap."); } } }
Şöyle de bir arayüz. Rastgele falan getirmek için kendin yaparsın bir şeyler. Üstüne uğraşır kafana göre geliştirirsin. Temeli verdim.
Eki Görüntüle 2324979
Teşekkür ederimÖrnek bu. Ayrıca hile yapmayı önlemek için json dosyasını rahatlıkla gizleyebilirsin.
Bu sitenin çalışmasını sağlamak için gerekli çerezleri ve deneyiminizi iyileştirmek için isteğe bağlı çerezleri kullanıyoruz.