C# si interogari din DB

Модератор: Злобный

nucleus
Новичок
Сообщения: 5
Зарегистрирован: Ср янв 16, 2008 14:58
Контактная информация:

C# si interogari din DB

Сообщение 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!
Аватара пользователя
SLAYER кент
Юзер
Сообщения: 89
Зарегистрирован: Чт авг 21, 2008 19:27

Сообщение 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.
Nucleu
Новичок
Сообщения: 23
Зарегистрирован: Пн сен 29, 2008 19:45
Контактная информация:

Сообщение Nucleu »

SLAYER кент,

mersi dar daca fac conexiunea automat! doar visual 2008 are asa ceva! :(
Аватара пользователя
Злобный
Завсегдатай
Сообщения: 2716
Зарегистрирован: Сб июн 18, 2005 21:05
Контактная информация:

Сообщение Злобный »

Нихрена непонятно, что ты хочешь, но почитай что ли про ADO.NET для начала.
http://msdn.microsoft.com/en-us/library/ms254937.aspx - тут, например.
Nucleu
Новичок
Сообщения: 23
Зарегистрирован: Пн сен 29, 2008 19:45
Контактная информация:

Сообщение 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?
Аватара пользователя
Злобный
Завсегдатай
Сообщения: 2716
Зарегистрирован: Сб июн 18, 2005 21:05
Контактная информация:

Сообщение Злобный »

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

Во-первых, в программе нужно создать объект Connection, во-вторых, объект Command. Не обязательно это делать имено тем способом, что приведен выше, но без Connection и Command не обойтись. Посмотри на примеры по ссылке.
Аватара пользователя
SLAYER кент
Юзер
Сообщения: 89
Зарегистрирован: Чт авг 21, 2008 19:27

Сообщение 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.
Nucleu
Новичок
Сообщения: 23
Зарегистрирован: Пн сен 29, 2008 19:45
Контактная информация:

Сообщение 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....
Аватара пользователя
SLAYER кент
Юзер
Сообщения: 89
Зарегистрирован: Чт авг 21, 2008 19:27

Сообщение 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).
Nucleu
Новичок
Сообщения: 23
Зарегистрирован: Пн сен 29, 2008 19:45
Контактная информация:

Сообщение 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
Аватара пользователя
Bentley
Юзер
Сообщения: 90
Зарегистрирован: Сб май 26, 2007 20:21
Откуда: Великобритания, Лондон

Сообщение Bentley »

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

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

Если интерисует имено файловая субд под дотнет фрэймовром, то следует смотреть в сторону так называемый встаиваемых, например MS SQL Compact. Он бесплатный, легковесный (приложение увеличивается всего на 1мб, можно даже через ClickOnce распростронять без проблем), и почти как полнофункциональный SQL Server, проектирвоание встроено прямо в VS и SSMSE. Есть в принципе альтернативы, вроде firebird или sqlite, но они не такие превосходные под фрэймворком. Но в конкретной задаче, они могут окататься интересней. Если нужно тока хранить и показывать некоторую информацию, можно воспользоваться встроенной во фрэймворк поддержкой датасетов, а имено - сохранять схему и данные в XML файлах. Но это только для небольших объемов данных, которые редко изменяются, скажем порядка пару мегабайтов на xml-файл, не более.
Аватара пользователя
SLAYER кент
Юзер
Сообщения: 89
Зарегистрирован: Чт авг 21, 2008 19:27

Сообщение 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
Nucleu
Новичок
Сообщения: 23
Зарегистрирован: Пн сен 29, 2008 19:45
Контактная информация:

Сообщение 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
Аватара пользователя
Злобный
Завсегдатай
Сообщения: 2716
Зарегистрирован: Сб июн 18, 2005 21:05
Контактная информация:

Сообщение Злобный »

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 хостить? А приложение на виндовой машине...
Nucleu
Новичок
Сообщения: 23
Зарегистрирован: Пн сен 29, 2008 19:45
Контактная информация:

Сообщение Nucleu »

Злобный,
da na FREEBSD tolika BD!
a application na drugih PC.

drugoe mojes predlojiti?
Аватара пользователя
Злобный
Завсегдатай
Сообщения: 2716
Зарегистрирован: Сб июн 18, 2005 21:05
Контактная информация:

Сообщение Злобный »

то есть у тебя архитектура клиент-сервер? сейчас уже редко так делают. пишут трех-звенку обычно. есть сервер БД, сервер приложения, клиенты. С развитием веба все чаще делают БД и Веб-сервер, а клиенты работают из браузеров.
Nucleu
Новичок
Сообщения: 23
Зарегистрирован: Пн сен 29, 2008 19:45
Контактная информация:

Сообщение Nucleu »

Злобный,
nu i eta pravelino!
i garazda proce napisati kod v php! :D
prosta zacasic etava hocet!
Аватара пользователя
Злобный
Завсегдатай
Сообщения: 2716
Зарегистрирован: Сб июн 18, 2005 21:05
Контактная информация:

Сообщение Злобный »

ты ему объясни, что это менее безопасно. что коннекшн стринги к базе данных будут храниться на каждом компе, что добраться до базы будет проще. что субд должна будет одновременно держать неколько коннекшнов. что на каждом компьютере-клиенте надо будет иметь дотнет фрэймворк, и всякое такое. заказчик чаще всего чего-то "хочет", потому что понятия не имеет, что это такое и какие есть альтернативы.
Nucleu
Новичок
Сообщения: 23
Зарегистрирован: Пн сен 29, 2008 19:45
Контактная информация:

Сообщение 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...
Аватара пользователя
Bentley
Юзер
Сообщения: 90
Зарегистрирован: Сб май 26, 2007 20:21
Откуда: Великобритания, Лондон

Сообщение Bentley »

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

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

Вернуться в «Программирование»