» »

[c#] in sql baza

[c#] in sql baza

japol ::

Ustvaril sem bazo Database1.sdf in v njej se nahaja tabela z imenom Baza1 s petimi stolpci. Do sedaj sem se vedno posluževal funkcij:
this.baza1TableAdapter.Fill(this.database1DataSet1.Baza1); // vstavi podatke v dataGridView1
// dodaj, shrani, izbris:
   baza1BindingSource.EndEdit();
            tableAdapterManager1.UpdateAll(this.database1DataSet1);
    baza1BindingSource.RemoveCurrent();
//.....

Sedaj pa potrebujem primer, kako dostopam do baze ki je nekje na disku IN kako v primeru da se baza nahaja na nekem serverju. Kakšne so vse možnosti? A lahko dostopam na podoben način kot npr. pri access bazi, npr. kjer je bila dodana references iz zafihka COM?

Looooooka ::

Kje maš bazo je definirano v connection stringu.
če spremeniš tega pred odpiranjem konekcije bi mogl bit ok.
Boljše vprašanje je zakaj uporabljaš tableadapterje in datasete.
Je to del zahtev za nalogo?

japol ::

Radi bi obdelali čim več možnosti povezave, zgoraj je ena izmed njih, iščemo pa še druge. Katera je boljša, hitrejša, ... glede na to kje se nahaja baza.

japol ::

Poskusil sem preko open file dialoga:
using (SqlConnection con = new SqlConnection(@"Data Source=" + openFileDialog1.FileName)) 
con.Open();

a mi javi napako pri con.Open();:
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)

mihies ::

Mogoče si za začetek kaj prečitaj o ADO.NET.
Drugače pa je tvoj "connection string" napačen. Poglej si, kako ga pravilno oblikuješ tule (poišči SQL Server):
www.connectionstrings.com.
Lahko pa tudi uporabiš SqlConnectionStringBuilder razred.
http://blog.rthand.com/
SLODUG - uporabniška skupina
https://www.facebook.com/groups/slodug/

Zgodovina sprememb…

  • spremenil: mihies ()

japol ::

1. Imam primer:
 String query = "INSERT INTO Baza1 (Zaporedna stevilka, Vrsta, Ime, Velikost)VALUES (@Zaporedna stevilka, @Vrsta, @Ime, @Velikost)";
            SqlCeConnection connection = new SqlCeConnection("Data Source = D:\\Programiranje\\Uporaba SQL Baze2\\Uporaba SQL Baze2\\bin\\Debug\\Database3.sdf; Persist Security Info=False");
            SqlCeCommand command = new SqlCeCommand(query, connection);

            command.Parameters.Add("@Zaporedna stevilka", SqlDbType.Int);
            command.Parameters["@Zaporedna stevilka"].Value = "7";

            command.Parameters.Add("@Vrsta", SqlDbType.NChar);
            command.Parameters["@Vrsta"].Value = "Osnovna";

            command.Parameters.Add("@Ime", SqlDbType.NChar);
            command.Parameters["@Ime"].Value = "Mi";

            command.Parameters.Add("@Velikost", SqlDbType.NChar);
            command.Parameters["@Velikost"].Value = "Srednja";

            connection.Open();
            command.ExecuteNonQuery();

in mi javi napako v zadnji vrstici: command.ExecuteNonQuery();, napaka je:
There was an error parsing the query. [ Token line number = 1,Token line offset = 30,Token in error = stevilka ]

2. kaj je razlika med SqlCeConnection in SqlConnection?

3. Imam še en primer:
 using (SqlCeConnection conn = new SqlCeConnection("Data Source = D:\\Programiranje\\Uporaba SQL Baze2\\Uporaba SQL Baze2\\bin\\Debug\\Database3.sdf; Persist Security Info=False"))
            {
                conn.Open();
                using (SqlCeCommand cmd = new SqlCeCommand("INSERT INTO Baza1 (Zaporedna stevilka, Vrsta, Ime, Velikost)VALUES (@Zaporedna stevilka, @Vrsta, @Ime, @Velikost)"))
                {
                    for (int vrstice = 0; vrstice <= dataGridView2.Rows.Count; vrstice++)
                    {
                        cmd.Parameters.Add("@Zaporedna stevilka", dataGridView2.Rows[vrstice].Cells[0].Value.ToString());
                        cmd.Parameters.Add("@Vrsta", dataGridView2.Rows[vrstice].Cells[1].Value.ToString());
                        cmd.Parameters.Add("@Ime", dataGridView2.Rows[vrstice].Cells[2].Value.ToString());
                        cmd.Parameters.Add("@Velikost", dataGridView2.Rows[vrstice].Cells[3].Value.ToString());
                    }
                }
            }

tu pa se mi pojavi napaka v vrstici cmd.Parameters.Add("@Zaporedna stevilka", dataGridView2.Rows[vrstice].Cells[0].Value.ToString());, napaka je: The SqlCeParameter with this name is already contained by this SqlCeParameterCollection.

4. Kakšna je razlika med ...Parameters.Add in ...Parameters.AddWithValue?

mihies ::

SQL CE je SQL Server Compact Edition, kolikor razumem ti uporabljaš navaden SQL Server, zato uporabljaj SqlConnection.

3. Parameter dodaš samo enkrat, ne vsakič. Njegovo vrednost spreminjaš v zanki. Torej, pred zanko dodaj parametre, v zanki jim nastavi vrednosti in kliči ExecuteNonQuery.

4. AddWithValue doda hkrati parameter in njegovo vrednost, ta prvi pa samo parameter (no, v resnici obstaja verzija Add, ki sprejme tudi vrednost, samo je zastarela (obsolete)).

Po drugi strani pa lahko uporabiš tudi SQL CE, če ti zadostuje.
http://blog.rthand.com/
SLODUG - uporabniška skupina
https://www.facebook.com/groups/slodug/

Zgodovina sprememb…

  • spremenil: mihies ()

japol ::

Nikakor mi ne uspe povezati z sqlConnection, javi napako pri .Open(), napaka je:
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)
če pa le dodam "Ce" (da namesto qslConnection je sqlCeConnection in enako za sqlCommand v sqlCeCommand) pa dela brez problema. Zakaj to?

Kakšen je npr. connestion string če se baza nahaja na nekem serverju?

darkolord ::

japol ::

Saj, poizkušam kar po vrsti s te strani: http://www.connectionstrings.com/sql-se...
Bazo sem ustvaril na: freemysqlhosting.net
In dobil sem:
- Account number: ............
- Host: sql3.freemysqlhosting.net
- Database name: ............
- Database user: ............
- Database password: ............
- Port number: ............
in kako potem izgleda connection?: SqlCeConnection con = new SqlCeConnection("Data Source= ????????????????????????");
poizkusil sem tako: SqlCeConnection con = new SqlCeConnection("Data Source=sql3.freemysqlhosting.net;Database=Baza3;User Id=??????; Password=?????");
in ni uspeha.

mihies ::

Eeee, ni vse kar ima v imenu črke SQL tudi Microsoft SQL Server (CE). Ti si naredil MySQL bazo, zato boš potreboval dvoje:
http://blog.rthand.com/
SLODUG - uporabniška skupina
https://www.facebook.com/groups/slodug/

japol ::

Res je, sem spregledal. Se pravi da najdem kjer bom lahko ustvaril MSSql bazo (po možnosti brezplačno) in potem bi to moralo delovati?

japol ::

Ali pa, ali je možno da se poveže MYSql brez konektorja ali česa drugega?

mihies ::

Zakaj pa ne inštaliraš SQL Express, ki je zastonj?
https://www.microsoft.com/en-us/server-...
http://blog.rthand.com/
SLODUG - uporabniška skupina
https://www.facebook.com/groups/slodug/

japol ::

Bazo že imam, sestavljena je bila v VS, sedaj le potrebujem kam bi jo lahko brezplačno shranil na internet da lahko dostopam do nje.

Če si namestim MYSql connector s strani: http://dev.mysql.com/downloads/connecto... ali se to potem implementira v .exe ali si bo moral uporabnik tudi namestiti ta connector? Namen je namreč da je aplikacija le .exe in da je povezana z sql bazo na internetu in kdorkoli ki ima to aplikacijo, lahko dostopa do te baze. Zaradi tega se rad poslužujem le možnosti ki jih omogoča .NET.

mihies ::

No, zdaj počasi prihajamo k razlogom :)
MySQL connector lahko dodaš k namestitvi tvoje aplikacije (verjetno niti ne potrebuje registracije, torej prepiši&prilepi).

Boljše vprašanje pa je, zakaj bi bazo odprl na tak način. Normalna pot je, da se naredi servisno aplikacijo na strežniku, ki navzen komunicira preko spletnih tehnologij, navznoter pa direkt do baze. Tako odpade vsa nepotrebna šara na odjemalcu.
Torej, tvoj odjemalec bi komuniciral s spletno storitvijo namesto direkt z bazo. Lahko si pogledaš ASP.NET WebAPI projekte.

Verjemi, bazo odpreti v spletu ni ena pametnejših zamisli.
http://blog.rthand.com/
SLODUG - uporabniška skupina
https://www.facebook.com/groups/slodug/

japol ::

Ok, hvala. Recimo da uporabim MYSql. Primeri:
http://www.codeproject.com/Articles/434...
http://www.codeproject.com/Tips/423233/...
http://forum.codecall.net/topic/71422-c...
Ali bi delovalo, če bi kopiral MySql.Data v mapo bin kjer je .exe in ga od tam dodal pod references? In če bi potem .exe in ta MySql.Data skupaj kopiral na usb ključ ali drugo mapo, a bi še vedno delovalo?


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

SQL problem

Oddelek: Programiranje
141551 (1169) win64
»

C# INSERT statment ne vpise podatkov

Oddelek: Programiranje
111049 (923) darkolord
»

C# OleDB create database

Oddelek: Programiranje
71219 (1051) DubleG
»

Statistika dijakov, pomoc

Oddelek: Programiranje
211670 (1154) Mitja Bonča
»

[C#] Query in code

Oddelek: Programiranje
261744 (1488) iggy1

Več podobnih tem