NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze – Lekce 2 - MS-SQL krok za krokem: Vytvoření databáze a tabulky

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
Avatar
Odpovídá na Jan Sála
Michal Štěpánek:16.8.2014 13:20

Podle mě by měla. protože je to v podstatě jen soubor, který je ovládán tou aplikací...
Kdysi jsem dělal jednu aplikaci, kde jsem jako databázi použil MS Access a normálně to bez problémů běhá i na počítači, kde nejsou žádné office nainstalované...

Odpovědět
16.8.2014 13:20
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Jan Sála
Tvůrce
Avatar
Jan Sála:16.8.2014 13:46

nejsme si jistý jestli jsem udělal postup správně
když kliknu pravým talčítkem na databázi v server exploreru je tam tento string: "Data Source=(Local­DB)\v11.0;AttachDbFi­lename="C:\User­s\Jan\Documen­ts\Visual Studio 2013\Projects\Pa­lappras\Palap­pras\Data\Slo­vicka.mdf";In­tegrated Security=True;Con­nect Timeout=30"

Ale když kliknu v data source - tak tam nejsou properties takže ten string musím najít až v connection wizard a tam je tento: Data Source=(Local­DB)\v11.0;AttachDbFi­lename=|DataDi­rectory|\Data\Slo­vicka.mdf;Inte­grated Security=True"

ten normálně v c# kódu používám a na mém počítači funguje (i mimo visual studio a i když přesunu složku debug jinam)

Odpovědět
16.8.2014 13:46
Když nevím co s tím, tak je chyba v compileru.
Avatar
Odpovídá na Jan Sála
Michal Štěpánek:16.8.2014 14:42

Když se koukneš do App.config, tak tam máš cestu k databázi popsanou (connectionstring).

DataDirectory znamená složku té aplikace, odkud jí spouštíš. Pokud to dáš do Program Files, může se stát, že to nebude chtít pracovat, protože tam jsou automaticky nastavována práva jen pro čtení...
Odpovědět
16.8.2014 14:42
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Jan Sála
Tvůrce
Avatar
Odpovídá na Michal Štěpánek
Jan Sála:16.8.2014 17:50

Chyba musí být v tomto kódu - nějak jsem to musel chybně připojit

//try
//{

    string connectionString = @"Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\Data\Slovicka.mdf;Integrated Security=True";
    using (SqlConnection pripojeni = new SqlConnection(connectionString))
    {
        pripojeni.Open();
        SqlCommand prikaz = new SqlCommand("SELECT * FROM Preklad WHERE Spanelsky LIKE @slovo ORDER BY Spanelsky", pripojeni);
        prikaz.Parameters.AddWithValue("@slovo", "%" + slovo + "%");
        SqlDataReader dataReader = prikaz.ExecuteReader();
        while (dataReader.Read()) // dokud neprojdeme vsechny zaznamy
        {
            ListBoxItem itm = new ListBoxItem();
            Vysledek vysl = new Vysledek();
            string rod = "";
            string pravidelnost = "";

            if (!dataReader["Rod"].ToString().Contains(' ') || !dataReader["Rod"].ToString().Contains(' '))
                rod = "; rod: " + dataReader["Rod"].ToString();

            if (dataReader["Nepravidelné"].ToString().Contains('r'))
                pravidelnost = "; Pravidelnost: " + dataReader["Nepravidelné"].ToString();
            //Učebnice: {3}; Lekce: {4}; Kategorie: {5};  ,dataReader["Ucebnice"].ToString(),dataReader["Lekce"].ToString(),dataReader["Kategorie"].ToString()
            string horni = string.Format("{0}{1}{2}", dataReader["Spanelsky"].ToString(), rod, pravidelnost);

            string[] cesky = new string[4];
            cesky[0] = dataReader["Cesky1"].ToString();
            cesky[1] = dataReader["Cesky2"].ToString();
            cesky[2] = dataReader["Cesky3"].ToString();
            cesky[3] = dataReader["Cesky4"].ToString();
            string dolni = cesky[0];
            for (int i = 1; i <= 3; i++)
                if (cesky[i].Length > 0)
                    dolni += "; " + cesky[i];
            vysl.slovickoTB.Text = horni;
            vysl.prekladTB.Text = dolni;
            itm.Content = vysl;
            try
            {
                vysledky.Items.Add(itm);
            }
            catch { }
        }
    }
//}
//catch { }

Zde je soubor App.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
  </configSections>
  <connectionStrings>
    <add name="Palappras.Properties.Settings.SlovickaConnectionString"
      connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\Data\Slovicka.mdf;Integrated Security=True"
      providerName="System.Data.SqlClient" />
  </connectionStrings>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
</configuration>
Odpovědět
16.8.2014 17:50
Když nevím co s tím, tak je chyba v compileru.
Avatar
Odpovídá na Jan Sála
Michal Štěpánek:16.8.2014 18:07

Zkus ten soubor "Slovicka.mdf" dát někam jinam (třeba do C:\DB\Slovicka­.mdf") a do Connectionstringu zadej pevnou cestu, jestli to pomůže

<connectionStrings>
    <add name="Palappras.Properties.Settings.SlovickaConnectionString"
      connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename=C:\DB\Slovicka.mdf;Integrated Security=True"
      providerName="System.Data.SqlClient" />
  </connectionStrings>

A v tom kódu souboru by mělo stačit uvést pouze jméno toho ConnectionStringu z App.config

Editováno 16.8.2014 18:09
Odpovědět
16.8.2014 18:07
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Jan Sála
Tvůrce
Avatar
Jan Sála:27.8.2014 18:58

Dal jsem ten kód to try catch a nechal jsem si chybu vypsat.
viz obrázek
Když přesunu na svém počítači aplikaci do jiné složky a spustím bez VS tak funguje - ověřil jsem zda to načítá opravdu z té lokální databáze a ne z nějaké jiné.
Ale na jiných počítačích to hází tuto chybu viz obrázek
Není to třeba tím že se musí nainstalovat sql server expres nebo není chyba někde v zabezpečení - já jsem použil windows authorization

Editováno 27.8.2014 18:59
Odpovědět
27.8.2014 18:58
Když nevím co s tím, tak je chyba v compileru.
Avatar
Odpovídá na Jan Sála
Michal Žůrek - misaz:27.8.2014 19:23

jaký používáš connection string? Pošli kód, kterým se k databázi připojjuješ. Kopíruješ na počítače i tu databázi?

 
Odpovědět
27.8.2014 19:23
Avatar
Jan Sála
Tvůrce
Avatar
Odpovídá na Michal Žůrek - misaz
Jan Sála:27.8.2014 20:09

Ano tu databázi tam kopíruju
ten kód už jsem psal výše ale tady je:

//try
//{

    string connectionString = @"Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\Data\Slovicka.mdf;Integrated Security=True";
    using (SqlConnection pripojeni = new SqlConnection(connectionString))
    {
        pripojeni.Open();
        SqlCommand prikaz = new SqlCommand("SELECT * FROM Preklad WHERE Spanelsky LIKE @slovo ORDER BY Spanelsky", pripojeni);
        prikaz.Parameters.AddWithValue("@slovo", "%" + slovo + "%");
        SqlDataReader dataReader = prikaz.ExecuteReader();
        while (dataReader.Read()) // dokud neprojdeme vsechny zaznamy
        {
            ListBoxItem itm = new ListBoxItem();
            Vysledek vysl = new Vysledek();
            string rod = "";
            string pravidelnost = "";

            if (!dataReader["Rod"].ToString().Contains(' ') || !dataReader["Rod"].ToString().Contains(' '))
                rod = "; rod: " + dataReader["Rod"].ToString();

            if (dataReader["Nepravidelné"].ToString().Contains('r'))
                pravidelnost = "; Pravidelnost: " + dataReader["Nepravidelné"].ToString();
            //Učebnice: {3}; Lekce: {4}; Kategorie: {5};  ,dataReader["Ucebnice"].ToString(),dataReader["Lekce"].ToString(),dataReader["Kategorie"].ToString()
            string horni = string.Format("{0}{1}{2}", dataReader["Spanelsky"].ToString(), rod, pravidelnost);

            string[] cesky = new string[4];
            cesky[0] = dataReader["Cesky1"].ToString();
            cesky[1] = dataReader["Cesky2"].ToString();
            cesky[2] = dataReader["Cesky3"].ToString();
            cesky[3] = dataReader["Cesky4"].ToString();
            string dolni = cesky[0];
            for (int i = 1; i <= 3; i++)
                if (cesky[i].Length > 0)
                    dolni += "; " + cesky[i];
            vysl.slovickoTB.Text = horni;
            vysl.prekladTB.Text = dolni;
            itm.Content = vysl;
            try
            {
                vysledky.Items.Add(itm);
            }
            catch { }
        }
    }
//}
//catch { }
Odpovědět
27.8.2014 20:09
Když nevím co s tím, tak je chyba v compileru.
Avatar
Odpovídá na Jan Sála
Michal Žůrek - misaz:27.8.2014 20:18

a kopíruješ ji do DataDirectory? Zkus tu cestu poskládat v C#, tak aby byla absolutní.

 
Odpovědět
27.8.2014 20:18
Avatar
Jan Sála
Tvůrce
Avatar
Jan Sála:27.8.2014 20:21

Já na ty počítače kopíruju úplně celej projekt.
A myslel jsem že DataDirectory je složka ze které se spouští aplikace

Odpovědět
27.8.2014 20:21
Když nevím co s tím, tak je chyba v compileru.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 82.