Страница 1 из 2

C# si interogari din DB

Добавлено: Вс сен 28, 2008 16:57
nucleus
Salut!
am nevoe de un mic ajutor!

fac o aplicatie in C# (2008) efectuez legatura cu DB dar nu stiu cum pot sa fac o interogare ca sa returneze valorile din sql altor variabile!

de exmplu :
textbox=table[user]; dar selecteaza dupa o anumita interogare!

Добавлено: Вс сен 28, 2008 19:38
SLAYER кент
#ConnectionStringBuilder csb = new #ConnectionStringBuilder;
csb.Database="...some database...";
csb.Server="...some database server...";
csb.Username="...Some username...";
....

#Connection conn=new #Connection(csb.ToString());
#Command comm = new #Command("select field1, field2 from table1 where field3=@parameter1":wink:;
comm.Parameters.Assign("@parameter1",#DbType.<some type>, [length]).Value="...some value...";
conn.open();
#DataReader reader = comm.ExecuteQuery(); //alternativ: ExecuteNonQuery, ExecuteScalar
while(reader.Read())
{
field1=reader[0].ToString();
field2=reader[1];
}
conn.close();





semnul # - prefixul bazei de date. Poate fi Sql, OleDb, MySql, Fb, in dependentza de ce foloseshti.
csb - setezi aici totzi parametrii necesari pentru a efectua conexiunea
comanda SQL se scrie in format string, cu simbolul "@" in cod fiind notatzi parametrii, transmishi ulterior. Folosirea parametrilor ridica viteza daca aceeashi comanda, cu diferite date se executa de foarte multe ori, shi previne SQL Injection. Cind le dai valoarea, trebuie sa indici ce tip de date are in baza de date, pentru campuri alde varchar trebuie shi lungimea campului.
Pentru a executa comanda, conexiunea trebuie sa fie deschisa.
ExecuteQuery() returneaza un obiect #DataReader, ExecuteScalar() returneaza un obiect, valoarea caruia este prima valoare a primului rind returnat de comanda SQL. ExecuteNonQuery() returneaza numarul de rinduri afectate (pentru comenzi Update, Insert, Delete) de tip int.

DataReader.Read() returneaza true daca s-a capatat urmatorul rind, false daca nu.

DataReader in rezultat este un array de obiecte.

Potzi cauta pe net daca potzi in aceasta modalitate sa obtzii obiectul DataReader ca un array asociativ de tip Dictionary<string, object>.


O alta modalitate ar fi generarea shi popularea dataset-urilor, insa in foarte multe cazuri e mai optimal sa foloseshti aceasta metoda.

Добавлено: Пн сен 29, 2008 19:47
Nucleu
SLAYER кент,

mersi dar daca fac conexiunea automat! doar visual 2008 are asa ceva! :(

Добавлено: Пн сен 29, 2008 21:08
Злобный
Нихрена непонятно, что ты хочешь, но почитай что ли про ADO.NET для начала.
http://msdn.microsoft.com/en-us/library/ms254937.aspx - тут, например.

Добавлено: Пн сен 29, 2008 21:22
Nucleu
Злобный писал(а):Нихрена непонятно, что ты хочешь, но почитай что ли про ADO.NET для начала.
http://msdn.microsoft.com/en-us/library/ms254937.aspx - тут, например.
nu vot v visual 2008 esti soedinenie s DB afto!
posle soedineie cac zdelati zaprosi?

Добавлено: Пн сен 29, 2008 22:29
Злобный
Я про автосоединение ничего не знаю. Приложение само по себе соединение с базой не поднимет. Неважно, написано оно в 2008-й студии, в 2005-й, или в ноутпэде. То, что ты видишь сервера из самой студии, не значит, что твоя программа получит соединение с сервером БД автоматически.

Во-первых, в программе нужно создать объект Connection, во-вторых, объект Command. Не обязательно это делать имено тем способом, что приведен выше, но без Connection и Command не обойтись. Посмотри на примеры по ссылке.

Добавлено: Вт сен 30, 2008 13:39
SLAYER кент
Nucleu, , din cite tzin minte, VS are wizard-uri, care creeaza conexiunea (shi comanda) in fishierul <FormName>.Designer.cs
doar ca se primeshte ca el este instantziat din momentul pornirii. Aceasta face aplicatzia mai greoaie. Nu recomand nici intr-un caz.

In exemplul de sus am efectuat citeva gresheli din graba. La instantzierea obiectului Command eu de obicei transmit shi conexiunea. Oricum trebuie de legat comanda de vreo conexiune, shi acesta este una din metode. A doua gresheala este folosirea incorecta a colectziei comm.Parameters. In loc de Add am pus Assign.

Dar cum a scris shi movies, vezi pe net, citeshte, poate ai sa gaseshti vreo modalitate care mai mult itzi va convine.

Добавлено: Ср окт 01, 2008 08:37
Nucleu
SLAYER кент,

mersii de info.
uite o asa intrebare!

ma gindeam sa fac o aplicatie cu o BD in mysql ce zici de asta? nu va stopa lucrarea aplicatiei?
sau mai bine o efectuez in MS access......
aveam ceva idei so extind pe tip retele....

Добавлено: Ср окт 01, 2008 22:22
SLAYER кент
Nucleu,
daca ai nevoie de o BD locală de dimensiuni mici şi eşti gata să depinzi de produsele Microsoft, în special de Microsoft Office Professional, foloseşte Access, deşi eu nu recomand aceasta. Mai bine te-ai uita la www.firebirdsql.org, este aşa ceva ca Firebird Embedded Server - nishte biblioteci (.DLL) care le pui intr-o mapă cu aplicaţia ta şi lucrezi local, fără a instala ceva în plus, cu unul din cele mai performante SGBD-uri, plus la asta OpenSource. Iar ca sa lucrezi direct cu baza de date (să-i faci tabelele, poate încă ceva), foloseşte IBExpert (cauta pe google, scoate Trial Version, ea pentru ţările din fosta URSS e gratuită şi oferă gama deplină de opţiuni).

Добавлено: Ср окт 01, 2008 22:41
Nucleu
SLAYER кент,
dar dar pe retea?
cu ce mai sfatui?
baza sa zic este destul de marisoara....
sa nu fi fost de tip retea ma limitam chiar si la FOX pro

Добавлено: Чт окт 02, 2008 07:07
Bentley
Nucleu,
ни в коем случае не использовать mysql. Во-первых намачаешься порядком, чтобы с ним работать тебе придется много чему научится. Во-вторых это на столько непопулярный субд под дотнэт фрэймворком, что оказать какую-нибудь помошь советом тебе врядли кто-то сможет. А проблемы будут и не малые, тебе придется самостоятельно их преодолевать. И в третьих, не существует нормального драйвера (ни одэиэцэшного ни нативного) для работы с ним из под фрэймворка. Правда эта ситуация была актуальной лет этак три тому назад, но не думаю что сейчас что-то изменилось существенно.

Что касается access - то здесь выводы тоже не утешительны. Работы над жэт енджине закончились и микрософт болше не будет развивать этот движок, тем более что он отказывается корректно работать под x64. С другой стороны, access не бесплатный. В смысле не бесплатная среда проектирования, но не думаю что ты будешь ручками писать запросы на изменения структуры базы данных через собственно ручно написанный енджине.

Если интерисует имено файловая субд под дотнет фрэймовром, то следует смотреть в сторону так называемый встаиваемых, например MS SQL Compact. Он бесплатный, легковесный (приложение увеличивается всего на 1мб, можно даже через ClickOnce распростронять без проблем), и почти как полнофункциональный SQL Server, проектирвоание встроено прямо в VS и SSMSE. Есть в принципе альтернативы, вроде firebird или sqlite, но они не такие превосходные под фрэймворком. Но в конкретной задаче, они могут окататься интересней. Если нужно тока хранить и показывать некоторую информацию, можно воспользоваться встроенной во фрэймворк поддержкой датасетов, а имено - сохранять схему и данные в XML файлах. Но это только для небольших объемов данных, которые редко изменяются, скажем порядка пару мегабайтов на xml-файл, не более.

Добавлено: Чт окт 02, 2008 07:11
SLAYER кент
Nucleu, mergi pe sfatul lui Bentley. Microsoft SQL Server cel mai bine lucreaza cu .NET. Deshi eu singur nu am vazut dificultatzi in lucrul cu Firebird pe .NET.

Poate nu am lucrat destul cu Microsoft SQL Server, dar imi pare ca Firebird ofera mai multe optziuni, poate nu disponibile deodata, dar care pot fi integrate ushor cu UDF. Il prefer shi din cauza ca e gratuit independent de modul in care il utilizezi, shi e foarte econom in resurse.

http://www.firebirdfaq.org/faq61/

singura chestie care la moment imi pare putzin (in cazul bazelor de date mari) este nr de tupluri maximal intr-o relatzie = 16 miliarde

Добавлено: Чт окт 02, 2008 08:15
Nucleu
Bentley,


ia soedineie s mysql sdelal ! nasol driver harosi "mysql-connector-net 5.2"

SLAYER кент, la mine baza se va rontugi in jur la 10-15 miii de inregistrari!

SLAYER кент,
Bentley,
vot primer ia bi hotel postaviti server pod freebsd no tam SQL server :? net..... a mysql :D

Добавлено: Чт окт 02, 2008 08:22
Злобный
SLAYER кент писал(а):Poate nu am lucrat destul cu Microsoft SQL Server, dar imi pare ca Firebird ofera mai multe optziuni
Мне кажется, что ты ошибаешься. Больше фич чем у СКЛ Сервера есть только у Оракла. Или под "optiuni" ты что-то другое имел в виду?

[off]добавлено спустя 3 минуты:[/off]
Nucleu писал(а):vot primer ia bi hotel postaviti server pod freebsd no tam SQL server :? net..... a mysql :D
Мне интересно, как ты managed code на freebsd запустишь :) Или дотнет уже портировали на freebsd? Я слышал что-то о портировании первого фрэймворка... Но не уверен, сделали ли это. И если сделали, то насколько хорошо )) Или ты только СУБД будешь на freebsd хостить? А приложение на виндовой машине...

Добавлено: Чт окт 02, 2008 08:55
Nucleu
Злобный,
da na FREEBSD tolika BD!
a application na drugih PC.

drugoe mojes predlojiti?

Добавлено: Чт окт 02, 2008 09:53
Злобный
то есть у тебя архитектура клиент-сервер? сейчас уже редко так делают. пишут трех-звенку обычно. есть сервер БД, сервер приложения, клиенты. С развитием веба все чаще делают БД и Веб-сервер, а клиенты работают из браузеров.

Добавлено: Чт окт 02, 2008 10:02
Nucleu
Злобный,
nu i eta pravelino!
i garazda proce napisati kod v php! :D
prosta zacasic etava hocet!

Добавлено: Чт окт 02, 2008 10:08
Злобный
ты ему объясни, что это менее безопасно. что коннекшн стринги к базе данных будут храниться на каждом компе, что добраться до базы будет проще. что субд должна будет одновременно держать неколько коннекшнов. что на каждом компьютере-клиенте надо будет иметь дотнет фрэймворк, и всякое такое. заказчик чаще всего чего-то "хочет", потому что понятия не имеет, что это такое и какие есть альтернативы.

Добавлено: Чт окт 02, 2008 10:18
Nucleu
Злобный,
da obesnil a emu po barabanu! hocit i vseo!
dumaiu sto zdelaiu v dotnet s bazoi v Mysql ne ponravitsa budet duplacivati i sdelaiu v web...

spasiba sa info...

Добавлено: Чт окт 02, 2008 19:02
Bentley
Nucleu писал(а):
Bentley,
vot primer ia bi hotel postaviti server pod freebsd no tam SQL server :? net..... a mysql :D
Для начала нужно четко понимать что такое платформа .NET, на чем она работает и для каких задач ее применяют. На сегодняшний день единственная операционная система, где нормально работает .NET - это микрософт циндас и ее вариации. Причем не ниже версии 98, и то с определенными ограничениями. Применимость этой платформы для создания простеньких сайтиков является расточительством. И хотя мировые цены на хостинг в принципе сравнялись, это правило будет действовать еще несколько лет.

В целом это платформа разработки корпоративных приложений для среднего и крупного бизнеса, вне зависимости от среды разработки и среды хостинга приложений в рамках системы Windows.