riješeno, sorry :I
- +/- sve poruke
- ravni prikaz
- starije poruke gore
Trebao bi prijedlog kako najbolje riješiti jedan problem.
Imam formu s detaljima i jedan gumb koji kada se pritisne treba uvećati samo jedno polje (int) u toj klasi. Znači ne treba ponovno otvarati formu (refresh), već samo nakon klika povećati broj za jedan u bazi. Nakon klika zabranim ponovni klik.
MVC5 i Razor su u pitanju.
edit:
napravio sam ovako nekako
public ActionResult AddNumber(int id)
{
var question = new Question() { Id = id, SimilarProblem = 1 };
using (var db = new ApplicationDbContext())
{
db.Questions.Attach(question);
db.Entry(question).Property(q => q.SimilarProblem).IsModified = true;
db.SaveChanges();
}
return Content("ok");
}
Inače polje SimilarProblem mi je null za početak. Pukne mi na dijelu spremanja i javi kao da nisu sva polja prošla validaciju. Problem je što ja trebam samo ovo polje SimilarProblem povećati za 1.
Znam da ovaj kôd to sada ne radi, dodajem mu broj 1, ali samo hoću da spremi barem to za početak.
Riješio sam to ovako:
public void AddNumber(int id)
{
var question = _context.Questions.FirstOrDefault(q => q.Id == id);
int brojac = 0;
brojac++;
if (question.SimilarProblem == null || question.SimilarProblem == 0)
question.SimilarProblem = brojac;
else
{
question.SimilarProblem = question.SimilarProblem + 1;
}
try
{
_context.SaveChanges();
}
.....
}
A u Razor-u imam ovako pod scripts
$(document).ready(function () {
var url = window.location.pathname;
var number = url.substring(url.lastIndexOf('/') + 1);
$('#icon').click(function() {
$.ajax({
url: '@Url.Action("ACTION", "CONTROLLER")',
type: "GET",
data: { id: number },
success: function (data) { return true; }
}).fail(function () { alert("greška!")});
});
});
Moram to još malo ispolirati, ali uglavnom ovo mi radi ono što sam i htio.
Opet ja s novim problemom.
Kako napraviti sljedeće:
Imam tablicu tagova Tag gdje ima nekoliko zapisa.
Prilikom kreiranja novog pitanja, tablica Pitanje, odabiru se ti tagovi (jedan ili više njih). Je li to many-to-many veza ili?
Jer dok se ne spremi pitanje nemam njegov ID koji bi se kod takve veze spremao u vezanu tablicu. Ili to Entity framework radi automatski?
Samo razmisli, kako bi se povezali tagovi u to pitanje. Tag je obicna Lookup tablica koja nesto odreduje, ona ne treba sadrzavati nikakve druge podatke, nego samo daje tag. Pitanje tablica je tablica koja sadrzi sve informacije, a recimo da stavis TagId kao foreign key onda da bi mogao samo jedan tag odabrati. Ovako dodavanjem nove tablice mozes odabrati vise tagova za isto pitanje.
Pozdrav,
Napravio sam formu koristeci C# i MVC 5 i sad imam problem jer trebam aplikaciju povezati sa local database koju koristimo na poslu da sejva podatke u SQL tablu, i da kasnije izvucem te iste podatke van.
Nemogu nac nikakav kvalitetni tutorijal u vezi toga a da je netko koristio bas MVC framework kod izrade aplikacije, trebaju mi nekakvi pointeri kud i kako dalje pa je svaki savjet dobrodosao. :)
Pozdrav,
Napravio sam formu koristeci C# i MVC 5 i sad imam problem jer trebam aplikaciju povezati sa local database koju koristimo na poslu da sejva podatke u SQL tablu, i da kasnije izvucem te iste podatke van.
Nemogu nac nikakav kvalitetni tutorijal u vezi toga a da je netko koristio bas MVC framework kod izrade aplikacije, trebaju mi nekakvi pointeri kud i kako dalje pa je svaki savjet dobrodosao. :)
Mislim da ti je to najlakše sa Entity frameworkom riješiti tj code first. Samo namjesti dobar connection string a za ostatak osnova EF-a imaš masu tutorijala.
To sam prvo probao jer je hrpa tutorijala za entity frame, ali kad idem napraviti controller zibaci mi ovo:
Guglao sam error ali pise da treba brisat configSource iz web configa a to bas nebi htio radit. Kolega koji je napravio cijeli intranet na kojem se ucim doslovno, nije koristio entity framework. Gledam njegove primjere kako je on to napravio na nekim slicnim stvrima i da ga jebes nemogu povezat na koji nacin je to izveo.
Entity framework ti je danas standard i koristi se za sav posao izmedu baze podataka i korisnika u. Netu (bar na projektima na kojima sam ja radio). Tako da bi ti preporučio da se igraš s tim configom dok ti ne proradi (trenutnu verziju projekta najbolje backupirat preko nekog version controla tipa git) tako da ako nesto zestoko zajebes mozes lako vratit nazad. U svakom slučaju nema ti smisla učit stare tehnologije kad je EF standard.
Kako ti sada izgleda connection string? I kako izgledaju neki njegovi conn stringovi gdje to radi?
Evo pokusavam bez entity frameworka jer neznam kako se rijesiti onog errora iznad, ali ni ovo ne radi, evo copy paste koda pa ako netko zna zasto mi controller ne radi dobro...trebao bi upisati podatke u database tablu "staffOnGoingTraining", connection string sam prekopirao iz webconfig fajla samo:
public class CreateEmployeeViewController : Controller
{
string connectionString = "Server=xxxxxxxxx; database=intranet; user id=xxxxxxx; password=xxxxxxxxx; MultipleActiveResultSets=true";
[HttpGet]
public ActionResult Index()
{
DataTable dtblstaffOnGoingTraining = new DataTable();
using (SqlConnection sqlCon = new SqlConnection(connectionString))
{
sqlCon.Open();
SqlDataAdapter sqlDa = new SqlDataAdapter("SELECT * FROM staffOnGoingTraining", sqlCon);
sqlDa.Fill(dtblstaffOnGoingTraining);
}
return View(dtblstaffOnGoingTraining);
}
[HttpGet]
public ActionResult Create()
{
return View(new CreateEmployeeViewModel());
}
[HttpPost]
public ActionResult Create(CreateEmployeeViewModel createEmployeeViewModel)
{
using (SqlConnection sqlCon = new SqlConnection(connectionString))
{
sqlCon.Open();
string query = "INSERT INTO staffOnGoingTraining VALUES(@TrainingName,@TrainingCost,TrainingStartDate,TrainingExpires)";
SqlCommand sqlCmd = new SqlCommand(query, sqlCon);
sqlCmd.Parameters.AddWithValue("@TrainingName", createEmployeeViewModel.TrainingName);
sqlCmd.Parameters.AddWithValue("@TrainingCost", createEmployeeViewModel.TrainingCost);
sqlCmd.Parameters.AddWithValue("@TrainingStartDate", createEmployeeViewModel.TrainingStartDate);
sqlCmd.Parameters.AddWithValue("@TrainingExpires", createEmployeeViewModel.TrainingExpires);
sqlCmd.ExecuteNonQuery();
}
return RedirectToAction("Index");
}
Znam da su ovo nubarska pitanja,ali eto bavim se ovime tek mjesec i pol dana(apprenticeship) i jos sam pogubljen u puno stvari.
Zašto tu držiš conn string?
Digni si EF, CodeFirst, puno ćeš si posla skinut s vrata. Baci oko na google, jednostavno je.
Ja sam do sada radio isključivo radio sa EF-om, ali mi se često pokazao prespor i gladan resursa, tako da vjerujem da ću se vratiti na plain old sql...
Ovako, imam problem. Napravio sam u xamarin.android aplikaciji Firebase Cloud Messaging. Notifikacija radi dobro, dolazi i kad je otvorena app i kad je u backgroundu.
Problem je što ne razumijem kako iz OnReceive metoda dobiti informacije i koristiti ih u npr. MainActivity. Pokušao sam kreirati event, ali dobijem Object reference not set to an instance of an object. Ovako izgleda to:
Args eventa
class OnMessageReceivedArgs
{
public bool messageReceived { get; set; }
public OnMessageReceivedArgs(bool received)
{
messageReceived = received;
}
}
Invoke eventa:
public event EventHandler<OnMessageReceivedArgs> OnMessageReceivedEvent;
public override void OnMessageReceived(RemoteMessage message)
{
base.OnMessageReceived(message);
OnMessageReceivedEvent.Invoke(this, new OnMessageReceivedArgs(true));
}
Subscribe na event:
protected override async void OnCreate(Bundle savedInstanceState)
{
MyFirebaseMessagingService myMessaging = new MyFirebaseMessagingService();
myMessaging.OnMessageReceivedEvent += MyMessaging_OnMessageReceivedEvent;
//ostatak obrisan zbog preglednosti
}
Event method:
private void MyMessaging_OnMessageReceivedEvent(object sender, OnMessageReceivedArgs e)
{
Toast.MakeText(this, "Message received", ToastLength.Long).Show();
}
Pokušao sam se subsribeati i iz OnResume() metode, dobijam isti exception. Ne razumijem kako i zašto dobijam exception, inače je taj exception kada nema subscribera ili kad se ne stigne nitko subscribeati, ali ovdje se user subsribean odmah prilikom otvaranja MainActivity-a, a poruka dolazi tek nakon toga.
Pokušao sam i sa broadcastReceiverom, ali također ne radi. Ako netko možda želi baciti oko.
-- ništa od ovoga vidim -- brisati
Trebao bih u stringu zamjeniti prvo sva mala slova u velika (replace) i nakom ovoga sva slova sa dijakritičkim znakovima prebaciti u 'normalna' slova. Pada mi na pamet replace, nije mi čak ni brzina previše bitna, ali tražim elegantnije rješenje. Ideja?
Edit:
Očito ne znam napraviti velika slova (upercase)
Trebao bih u stringu zamjeniti prvo sva mala slova u velika (replace) i nakom ovoga sva slova sa dijakritičkim znakovima prebaciti u 'normalna' slova. Pada mi na pamet replace, nije mi čak ni brzina previše bitna, ali tražim elegantnije rješenje. Ideja?
Edit:
Očito ne znam napraviti velika slova (upercase)
Imap ToUpper/ToLower metodu. Ako ces mijenjati dijakritike s replaceom rađe koristi stringBuilder da ne stvaraš novi string sa svakom promjenom.
Dečki jer vi razumjete što je string i kako je složena ASCII tablica. Iskoristite to, kakvi StringBuilderi i ToUpper/Lower metode.
Dečki jer vi razumjete što je string i kako je složena ASCII tablica. Iskoristite to, kakvi StringBuilderi i ToUpper/Lower metode.
A jel ti razumiješ da je string immutable i da svakom promjenom u stringu zapravo stvaraš potpuno novi string?
Daa, u čemu je problem StringBuilder isto alocira memoriju i to koliko memorije i na koji način?, Lower/Upper isto.
Npr. ovako može napraviti svu manipulaciju stringom u jednom koraku.
var str = "Like A Boss";
Console.WriteLine(str);
// Nisam odolio da ne zakompliciram :-)
str = new string(str.Select(s => (s > 64 && s < 91) ? (char)(s | (char)96) : s).ToArray());
// str = new string(str.Select(s => char.IsLower(s) ? char.ToUpper(s) : s).ToArray());
Console.WriteLine(str);
Malo štuca za
var str = "Šibica na Ćošku";
Vražiji Unicode i UTF-16
. Neka si sami popravljaju. Ima ispod skriveno rješenje pa neka djeca uče progrmirati.
Pozdrav društvo,
početnik sam u programiranju. Započeo sam jedan projekt kojeg radim i usput učim. Zapeo sam na jednom problemu kojeg ne znam riješiti.
Imam dvije tablice u bazi MySQL, iz jedne samo povlačim podatke koje se prikazuju u ComboBoxu koji se kasnije unose u drugu tablicu (tabice su međusobno povezane preko vanjskog ključa).
Naišao sam na problem kod inserta u bazu, svaki put kod inserta mi se ubacuje 0, umjesto id-a.
Ima li tko možda kakvu ideju gdje griješim ili šta trebam napraviti?
Hvala Vam.
//ispis u ComboBox
public void Fillcombo()
{
//spajanje na bazu
string _conStr = "Server=localhost;Port=3306;Database=nekretnine;Uid=nekret;Pwd=radnekret;";
string Query = "select * from nekretnine.status;";
MySqlConnection mysqlCon = new MySqlConnection(_conStr);
MySqlCommand cmdmysql = new MySqlCommand(Query, mysqlCon);
MySqlDataReader myReader;
try
{
mysqlCon.Open();
myReader = cmdmysql.ExecuteReader();
while (myReader.Read())
{
string sName = myReader.GetString("statnekret");
string sName2 = myReader.GetString("id_status");
un_stat.Items.Add(sName);
un_stat.ValueMember = sName2;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
//insert u bazu
private void unos_Click(object sender, EventArgs e)
{
//spajanje na bazu
string _conStr = "Server=localhost;Port=3306;Database=nekretnine;Uid=nekret;Pwd=radnekret;";
string sQuery = "select * nekretnine.narav;";
string Query = "insert into test (id_status) values ('" +this. un_stat.SelectedValue.ToString() + "');";
MySqlConnection conDataBase = new MySqlConnection(_conStr);
MySqlCommand cmdDataBase = new MySqlCommand(Query, conDataBase);
MySqlDataReader myReader;
try
{
conDataBase.Open();
myReader = cmdDataBase.ExecuteReader();
MessageBox.Show("Spremljeno!");
while (myReader.Read())
{
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
Identity na ID-u te tablice imaš? Moguće da ti to nije napravljeno pa ti zato javlja grešku.
Jesu li isti tip podatka taj id_status u bazi i aplikaciji? Možda ti i zbog toga ne radi.
@Sayler nisam nikako radio sa MySql bazom ali pretpostavljam da je ista stvar kao i sa MSSQL-om.
Ovako kada radiš neki dohvat podataka npr želiš čitati neke podatke iz tablice tad koristiti DataReader i ovome slučaju što si gore napravi čini se ok čitaš podatke iz baze i puniš combo box sa vrijednostima.
Ali kod inserta da bi spremio podatke u bazu koristiš DataReader što mislim da nije ispravno ako želiš spremiti podatke možeš koristiti ExecuteScalar ili ExecuteNonQuery metodu klase MySqlCommand.
Execute scalar - koristiš većinom kad nad bazom želiš dohvatiti samo jednu vrijednost npr. Select adresa_zgrade from nekretnine i ako ne postaviš where uvjet u svom query-u ova metoda vrati prvu adresu zgrade koja je zapisana u bazi.
Sa execute scalar može izvršiti update i insert query nad bazom.
Naljbolja je praksa kod update-a ili insert-a koristiti metodu ExecuteNonQuery jer ova metoda vraća broj redaka koji su u bazi insertani/ažurirani, tako ako vrati 0 upit nad bazom nije prošao nešto nije uredu s query-em ako je > 0 onda znači da je upit prošao.
Npr. u tvome slučaju, namjerno sam u zagradu stavio field umjesto id_status jer nije dobro da sam u bazi insertaš id vrijednosti jer vrijednosti id-a moraju biti jedinstvene, kao što je @Pero Dinamit napisao provjeri jesi li postavio ID kolonu da ima identity (ovo se koristi u MSSQL-u, guglanjem vidim da je u MySql-u AUTO_INCREMENT), pusti MySql server da se brine o vrijednostima ID-a.
string _conStr = "Server=localhost;Port=3306;Database=nekretnine;Uid=nekret;Pwd=radnekret;";
int o = -1;
string Query = "insert into test (field) values ('" +this. un_stat.SelectedValue.ToString() + "');";
MySqlConnection conDataBase = new MySqlConnection(_conStr);
MySqlCommand cmdDataBase = new MySqlCommand(Query, conDataBase);
o = cmdDataBase.ExecuteNonQuery();
if(o > 0)
MessageBox.Show("Uspješno ažuriran/insertan podatak u bazi.");
else
MessageBox.Show("Podatak nije ažuriran/insertan u bazi!");
Daa, u čemu je problem StringBuilder isto alocira memoriju i to koliko memorije i na koji način?, Lower/Upper isto.
Npr. ovako može napraviti svu manipulaciju stringom u jednom koraku.
var str = "Like A Boss";
Console.WriteLine(str);
// Nisam odolio da ne zakompliciram :-)
str = new string(str.Select(s => (s > 64 && s < 91) ? (char)(s | (char)96) : s).ToArray());
// str = new string(str.Select(s => char.IsLower(s) ? char.ToUpper(s) : s).ToArray());
Console.WriteLine(str);
Malo za salu a malo i ozbiljno: toj kodi nedostaje komentar, koji objasni, cemu ona sluzi. Dobra stara praksa je, da komentar treba biti kratak i jasan, a u svakom slucaju kraci od samog koda. Prihvatas izazov, da napises jos komentar za tu kodu, prateci neke uobicajene smjernice? ;-)
U ovom kodu po meni ne postoji ništa vrijedno komentiranja, al da pojasnim (s > 64 && s < 91) u ASCII tablici provjeri da li je veliko slovo, ako je onda mu postavi 6 bit na 1 (char)(s | (char)96) 96 je binarno 01100000. I tako se prebaci u mala slova, jer su u malim slovima 6 i 7 bit su uvjek 1, pa sam mogao sam koristiti i 32 (dec) 00100000 (bin), izmjena 6tog bita u 1 bila bi dovoljna za konvertirati u malo slovo. Ovako izgleda binarna ascii tablica https://racunarskapismenost.files.wordpress.com/2014/09/kod-3-e1410715398755.png.
Ovaj kod neće raditi ispravno za UNICODE znakove!
U ovom kodu po meni ne postoji ništa vrijedno komentiranja, al da pojasnim (s > 64 && s < 91) u ASCII tablici provjeri da li je veliko slovo, ako je onda mu postavi 6 bit na 1 (char)(s | (char)96) 96 je binarno 01100000. I tako se prebaci u mala slova, jer su u malim slovima 6 i 7 bit su uvjek 1, pa sam mogao sam koristiti i 32 (dec) 00100000 (bin), izmjena 6tog bita u 1 bila bi dovoljna za konvertirati u malo slovo. Ovako izgleda binarna ascii tablica https://racunarskapismenost.files.wordpress.com/2014/09/kod-3-e1410715398755.png.
Ovaj kod neće raditi ispravno za UNICODE znakove!
Ipak je objasnjenje poprilicno dugacko. A zbog uvodne izjave sam bio slobodan negativno ocijeniti poruku/odgovor. ;-)
Lambda-Expressions jesu vrlo popularni medju mladjim programerima i izgledaju "cool", ali odrzavanje aplikacije napisane na takav nacin poslije dvije ili tri godine, kad treba nesto dogradit ili nadgradit postaje prava nocna mora. Narocito znaju biti problematicne gnijezdene petlje, koje su u lambdama nekako sakrivene a mogu imati velik utjecaj na brzinu izvodjenja. Ako pravite aplikacije, koje ce imati duzi rok trajanja (neke moje aplikacije su u uporabi vec tamo, od 2003 i .NET 1.1), izbjegavajte necitljive konstrukte i kometrar neka uvijek opisuje zeljenu operaciju. U tvom slucaju npr.:
Za pretvorbu velikih slova (64..91) u mala ako je u pitanji ASCII tabela, dovoljno je podesiti sesti bita na 1
Iz neceg takvog (ispricavam se na slabijem znanju jezika) moze netko i poslije par godina skuziti, koju je namjeru programer imao, kad je pisao kod. U tom duhu je mnogo put bolja uporaba dobrih starih (verbose) konstrukta, ako gledam iz izkustva i prakse.
Mislim da nisi shvatio zašto je taj kod baš tako napisan. Jer nisi pratio thread od početka.
