Šta je novo?

C# Desktop aplikacija i problem povezivanja sa sql bazom

kraft

Cenjen
Učlanjen(a)
10.07.2009
Poruke
273
Poena
169
Nov sam u Microsoft razvojnim okruzenjima pa ce ovo izgledati kao pocetnicki problem, ali sta je tu je, ne mogu da ga resim vec ceo dan, a Google resenja ne pomazu.

Napravio sam malu C# aplikaciju i VS 2008 koja se povezuje sa SQL Server 2005 i radi neke osnovne operacije sa bazom. Na racunaru gde imam instalirane alate, konkretno Visual Studio 2008 i SQL Server 2005 sve radi bez problema. Problem se javlja kada tu istu aplikaciju kopiram na neki drugi racunar gde nemam te alate i na kojima je instaliran .NET Framework 3.5.

Greska koju dobijam je:

Kod:
System.Data.SqlClient.SqlException: A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified)

Ono sto mogu da procitam je da ne moze da ostvari konekciju sa SQL Serverom, ali poprilicno mi je nelogicno da moram da instaliram i ceo SQL Server zajedno sa aplikacijom. Koliko mogu da se setim stiva sa fakulteta, ovakve stvari su radile bez problema sa Access bazom.

Nije problem do putanje, jer sam probao sve moguce varijante, cak sam kompalirao da sve bude na C: i problem i dalje postoji.

Da li je mozda potrebno da se instalira jos neki dodatak pored .NET Framework-a?

Molim za pomoc,
Hvala
 
Mislim da bi trebalo da instaliras i SQL server. Pokusaj da izmenis aplikaciju i koristis sqlite:
http://www.codeproject.com/KB/cs/SQLiteCSharp.aspx

Ne znam koliko je baza koju si napravio komplikovana, ali dosta stvari moze da se uradi pomocu sqlite-a.
 
Moras da instaliras SQL Server u tvom slucaju. Medjutim, zavisi sta ti je na umu, ali mogao bi da napravis Access bazu i iskoristis Microsoft Jet Provider, uz pomoc koga pristupas direktno bazi na lokalnom disku, bez potrebe za serverom. On se vec nalazi u .Netu.
 
Nije problem do Visual Studio-a ili verzije .NET-a koja je instalirana na tim drugim računarima... problem je sa neimanjem servisa neophodnih za rad SQL Server-a.

Dakle, potrebno je da imaš instalirane i pokrenute servise, poput SQL Server Browser servisa, koji je neophodan za aplikacije koje koriste SQL Server konekcije.

Ako ti nije neophodan SQL Server DB, pogledaj SQLlite i ono najjednostavnije rešenje... Access.
 
Naravno da je potrebno imati engine koji ce prihvatati upite.
Cak i access trazi da access runtime bude instaliran.

Sto se SQL servera tice, mozes da isporucis express verziju zajedno sa svojom aplikacijom ili da koristis neki serverless bazu kao sto je SQLLite koji moze lako da se embeduje u aplikaciju ili, ako je baza bas mala, moze da se ide i putem cuvanja na file system-u (XML/JSON/etc, sa LINQ-om je makar sada sve lako).
 
+1 za SQLite , mada mozes i sa SQL CE verzijom ,mali je runtime samo je potreban jedan .dll uz aplikaciju i moze da se dizajnira baza u VS2008.
 
pa ako pokusavas da pristupis drugom racunaru u mrezi, na kojem se nalazi sql server, onda moras da konfigurises server da dozvoljava externi (nelokalni) saobracaj, a ako pokusavas da pristupis lokalnom sql serveru, logicno onda moras da ga instaliras, i u tom slucaju uzmi sql ce 4.0
 
SQL Server CE traži instalaciju - nije tačno da treba jedan dll. Može i bez instalacije,
pokupiš dll-ove iz foldera u kojem je instaliran + .NET provider i odradiš deploy sa instalacijom.
SQLite je poprilično dobar, zahteva instalaciju dva dll-a u poslednjoj reviziji.
Ili možda Eloquera - ako hoćeš da okušaš sreću s objektnim bazama...
 
Poslednja izmena:
Mozes da stavis bazu na net i da joj pristupas sa windows aplikacijom.
Cak i jeftini hosting tipa GoDaddy podrzava sada Remote Connections za MSSQL (200x).

Sa ovom varijantom ne moras bas nista da menjas u aplikaciji... cak ti je i connection string isti na svim racunarima...
 
Ne znam da li je na temu, ali ja trenutno pišem C# aplikaciju i treba mi savet za MySQL (koji nema veze sa C#-om)

Hoću da napravim proceduru koja će vratiti sve redove iz jedne tabele u kojima je vrednost u jednoj koloni veća od vrednosti u sličnoj koloni druge tabele u redu u kome je vrednost jedne druge kolone tačno određena (jedinstvena) vrednost.

Krenuo sam ovako:
CREATE DEFINER=`root`@`localhost` PROCEDURE `someUberProcedure`(IN id INT(10))
BEGIN
SELECT * FROM list
LEFT JOIN users ON (list.some_id = users.user_id)
WHERE list.other_id = 0 AND list.date_time > (SELECT some_date_time FROM users WHERE user_id = id);
END

MySQL ovo prihvati, ali kad treba da se izvrši -> 0 rows affected. Sigurno nešto nisam napisao kako treba ili ovako napisano jednostavno ne može da radi. Kako da napišem query koji će raditi to što mi treba?
 
Poslednja izmena:
Ne radim sa MySQLom, ali tvoja procedura nema ni jedan OUT parametar, samo IN. Vrednosti koje procedura vraća se smeštaju u OUT parametre.
Ako hoćeš da ti procedura vrati ceo record set možeš ili da vratiš kursor ili da napraviš C# DataAdapter kojim ćeš napuniti DataSet (ne znam da li je ovo moguće za MySQL, znam da može za SQL i Oracle).

To što ti vrati 0 rows affected samo znači da upit nije izmenio ni jedan red. Znači za sve select upite treba da ti vrati isto.


U principu proveri prvo da li ti upit ispravno radi van procedure - izvrši ga direktno umesto procedure. Ako radi, onda ga enkapsuliraj u proceduru.
 
Nazad
Vrh Dno