C# si interogari din DB
Модератор: Злобный
C# si interogari din DB
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!
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
#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";
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.
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";
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.
Нихрена непонятно, что ты хочешь, но почитай что ли про ADO.NET для начала.
http://msdn.microsoft.com/en-us/library/ms254937.aspx - тут, например.
http://msdn.microsoft.com/en-us/library/ms254937.aspx - тут, например.
nu vot v visual 2008 esti soedinenie s DB afto!Злобный писал(а):Нихрена непонятно, что ты хочешь, но почитай что ли про ADO.NET для начала.
http://msdn.microsoft.com/en-us/library/ms254937.aspx - тут, например.
posle soedineie cac zdelati zaprosi?
Я про автосоединение ничего не знаю. Приложение само по себе соединение с базой не поднимет. Неважно, написано оно в 2008-й студии, в 2005-й, или в ноутпэде. То, что ты видишь сервера из самой студии, не значит, что твоя программа получит соединение с сервером БД автоматически.
Во-первых, в программе нужно создать объект Connection, во-вторых, объект Command. Не обязательно это делать имено тем способом, что приведен выше, но без Connection и Command не обойтись. Посмотри на примеры по ссылке.
Во-первых, в программе нужно создать объект Connection, во-вторых, объект Command. Не обязательно это делать имено тем способом, что приведен выше, но без Connection и Command не обойтись. Посмотри на примеры по ссылке.
- SLAYER кент
- Юзер
- Сообщения: 89
- Зарегистрирован: Чт авг 21, 2008 19:27
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.
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.
- SLAYER кент
- Юзер
- Сообщения: 89
- Зарегистрирован: Чт авг 21, 2008 19:27
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).
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,
ни в коем случае не использовать mysql. Во-первых намачаешься порядком, чтобы с ним работать тебе придется много чему научится. Во-вторых это на столько непопулярный субд под дотнэт фрэймворком, что оказать какую-нибудь помошь советом тебе врядли кто-то сможет. А проблемы будут и не малые, тебе придется самостоятельно их преодолевать. И в третьих, не существует нормального драйвера (ни одэиэцэшного ни нативного) для работы с ним из под фрэймворка. Правда эта ситуация была актуальной лет этак три тому назад, но не думаю что сейчас что-то изменилось существенно.
Что касается access - то здесь выводы тоже не утешительны. Работы над жэт енджине закончились и микрософт болше не будет развивать этот движок, тем более что он отказывается корректно работать под x64. С другой стороны, access не бесплатный. В смысле не бесплатная среда проектирования, но не думаю что ты будешь ручками писать запросы на изменения структуры базы данных через собственно ручно написанный енджине.
Если интерисует имено файловая субд под дотнет фрэймовром, то следует смотреть в сторону так называемый встаиваемых, например MS SQL Compact. Он бесплатный, легковесный (приложение увеличивается всего на 1мб, можно даже через ClickOnce распростронять без проблем), и почти как полнофункциональный SQL Server, проектирвоание встроено прямо в VS и SSMSE. Есть в принципе альтернативы, вроде firebird или sqlite, но они не такие превосходные под фрэймворком. Но в конкретной задаче, они могут окататься интересней. Если нужно тока хранить и показывать некоторую информацию, можно воспользоваться встроенной во фрэймворк поддержкой датасетов, а имено - сохранять схему и данные в XML файлах. Но это только для небольших объемов данных, которые редко изменяются, скажем порядка пару мегабайтов на xml-файл, не более.
ни в коем случае не использовать mysql. Во-первых намачаешься порядком, чтобы с ним работать тебе придется много чему научится. Во-вторых это на столько непопулярный субд под дотнэт фрэймворком, что оказать какую-нибудь помошь советом тебе врядли кто-то сможет. А проблемы будут и не малые, тебе придется самостоятельно их преодолевать. И в третьих, не существует нормального драйвера (ни одэиэцэшного ни нативного) для работы с ним из под фрэймворка. Правда эта ситуация была актуальной лет этак три тому назад, но не думаю что сейчас что-то изменилось существенно.
Что касается access - то здесь выводы тоже не утешительны. Работы над жэт енджине закончились и микрософт болше не будет развивать этот движок, тем более что он отказывается корректно работать под x64. С другой стороны, access не бесплатный. В смысле не бесплатная среда проектирования, но не думаю что ты будешь ручками писать запросы на изменения структуры базы данных через собственно ручно написанный енджине.
Если интерисует имено файловая субд под дотнет фрэймовром, то следует смотреть в сторону так называемый встаиваемых, например MS SQL Compact. Он бесплатный, легковесный (приложение увеличивается всего на 1мб, можно даже через ClickOnce распростронять без проблем), и почти как полнофункциональный SQL Server, проектирвоание встроено прямо в VS и SSMSE. Есть в принципе альтернативы, вроде firebird или sqlite, но они не такие превосходные под фрэймворком. Но в конкретной задаче, они могут окататься интересней. Если нужно тока хранить и показывать некоторую информацию, можно воспользоваться встроенной во фрэймворк поддержкой датасетов, а имено - сохранять схему и данные в XML файлах. Но это только для небольших объемов данных, которые редко изменяются, скажем порядка пару мегабайтов на xml-файл, не более.
- SLAYER кент
- Юзер
- Сообщения: 89
- Зарегистрирован: Чт авг 21, 2008 19:27
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
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
Мне кажется, что ты ошибаешься. Больше фич чем у СКЛ Сервера есть только у Оракла. Или под "optiuni" ты что-то другое имел в виду?SLAYER кент писал(а):Poate nu am lucrat destul cu Microsoft SQL Server, dar imi pare ca Firebird ofera mai multe optziuni
[off]добавлено спустя 3 минуты:[/off]
Мне интересно, как ты managed code на freebsd запустишь Или дотнет уже портировали на freebsd? Я слышал что-то о портировании первого фрэймворка... Но не уверен, сделали ли это. И если сделали, то насколько хорошо )) Или ты только СУБД будешь на freebsd хостить? А приложение на виндовой машине...Nucleu писал(а):vot primer ia bi hotel postaviti server pod freebsd no tam SQL server net..... a mysql
ты ему объясни, что это менее безопасно. что коннекшн стринги к базе данных будут храниться на каждом компе, что добраться до базы будет проще. что субд должна будет одновременно держать неколько коннекшнов. что на каждом компьютере-клиенте надо будет иметь дотнет фрэймворк, и всякое такое. заказчик чаще всего чего-то "хочет", потому что понятия не имеет, что это такое и какие есть альтернативы.
Для начала нужно четко понимать что такое платформа .NET, на чем она работает и для каких задач ее применяют. На сегодняшний день единственная операционная система, где нормально работает .NET - это микрософт циндас и ее вариации. Причем не ниже версии 98, и то с определенными ограничениями. Применимость этой платформы для создания простеньких сайтиков является расточительством. И хотя мировые цены на хостинг в принципе сравнялись, это правило будет действовать еще несколько лет.Nucleu писал(а):
Bentley,
vot primer ia bi hotel postaviti server pod freebsd no tam SQL server net..... a mysql
В целом это платформа разработки корпоративных приложений для среднего и крупного бизнеса, вне зависимости от среды разработки и среды хостинга приложений в рамках системы Windows.