komunikace s MSSQL databází   zodpovězená otázka

VB.NET

Článek s tímto názvem mi moc pomohl, jen bych rád věděl jestli je možné podobným způsobem vytvořit i Windows aplikaci. Předpokládám, že ano, ale nedaří se.

Přidávám kod, který zatím nechodí a nedokážu vymyslet proč.

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim ConnectionString As String = "Server=localhost\SQLEXPRESS;Initial Catalog=pokus;Trusted_Connection=yes;"

        Dim sqlCommand As String = ("SELECT [den],[mes],[rok],[udal] FROM [projekt]") ' vytvoření dotazu a předání připojení

        sqlConnection.Open() ' pomocí dat z ConnectionStringu spojení otevřeme
        Dim dataReader As DataTableReader = sqlCommand.ExecuteReader() ' spuštění dotazu a vytvoření objektu na čtení řádků

        ' smyčka na čtení záznamů
        Do While dataReader.Read ' posun na další řádky, dokud jsou k dispozici
            TextBox1.Text = (String.Format("Záznam: {0} {1}  {2}  {3}", dataReader("den"), dataReader("mes"), dataReader("rok"), dataReader("udal"))) ' zobrazí záznam
        Loop

        Console.ReadKey()

        dataReader.Close() ' nejdříve uzavřeme aktuální dotaz
        sqlConnection.Close() ' a pak i spojení
    End Sub
End Class
nahlásit spamnahlásit spam 0 odpovědětodpovědět

"Kód nechodí" je docela široký pojem, mohl byste napsat, co přesně tam nejde? Jestli se dobře koukám, něco vám tam asi bude chybět, ale možná jste na to jen zapomněl.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Udělal jste tam pár chyb. Takhle by to mělo chodit:


Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim ConnectionString As String = "Server=localhost\SQLEXPRESS;Initial Catalog=pokus;Trusted_Connection=yes;"

        Dim sqlCommand As String = ("SELECT [den],[mes],[rok],[udal] FROM [projekt]") ' vytvoření dotazu a předání připojení

        sqlConnection.Open() ' pomocí dat z ConnectionStringu spojení otevřeme
        Dim dataReader As SqlDataReader = sqlCommand.ExecuteReader() ' spuštění dotazu a vytvoření objektu na čtení řádků
	' << objekt se jmenuje SqlDataReader

        ' smyčka na čtení záznamů
        Do While dataReader.Read ' posun na další řádky, dokud jsou k dispozici
            TextBox1.Text &= (String.Format("Záznam: {0} {1}  {2}  {3}", dataReader("den"), dataReader("mes"), dataReader("rok"), dataReader("udal"))) & vbCrLf ' zobrazí záznam
	    ' << správné čtení do textboxu
        Loop

        ' Console.ReadKey() << tohle je zbytečné ve formulářové aplikaci

        dataReader.Close() ' nejdříve uzavřeme aktuální dotaz
        sqlConnection.Close() ' a pak i spojení
    End Sub
End Class
nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Ještě tam toho chybí víc (používáte objekty SqlConnection a SqlCommand, ale nemáte je nadeklarované).

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim ConnectionString As String = "Server=localhost\SQLEXPRESS;Initial Catalog=pokus;Trusted_Connection=yes;"

        ' <<< objekt spojení musíte deklarovat a vytvořit
        Dim sqlConnection As New SqlConnection(ConnectionString)

        ' <<< tady musíte vytvořit objekt SqlCommand, ne jen proměnnou typu String. Samotný příkaz předáváte jako argument v kontstruktoru, přečtěte si pořádně článek pro začátečníky
        Dim sqlCommand As New SqlCommand("SELECT [den],[mes],[rok],[udal] FROM [projekt]", sqlConnection) ' vytvoření dotazu a předání připojení

        sqlConnection.Open() ' pomocí dat z ConnectionStringu spojení otevřeme
        Dim dataReader As SqlDataReader = sqlCommand.ExecuteReader() ' spuštění dotazu a vytvoření objektu na čtení řádků
	' << objekt se jmenuje SqlDataReader

        ' smyčka na čtení záznamů
        Do While dataReader.Read ' posun na další řádky, dokud jsou k dispozici
            TextBox1.Text &= (String.Format("Záznam: {0} {1}  {2}  {3}", dataReader("den"), dataReader("mes"), dataReader("rok"), dataReader("udal"))) & vbCrLf ' zobrazí záznam
	    ' << správné čtení do textboxu
        Loop

        ' Console.ReadKey() << tohle je zbytečné ve formulářové aplikaci

        dataReader.Close() ' nejdříve uzavřeme aktuální dotaz
        sqlConnection.Close() ' a pak i spojení
    End Sub
End Class

A ještě něco - obecně nebývá dobré pojmenovávat proměnné stejně jako jejich datové typy, to funguje v jazyce C#, ale VB.NET na to není stavěný. Zkuste nepojmenovávat proměnné sqlConnection a sqlCommand, ale třeba con a com. Je to kratěí a název není stejný jako datový typ SqlConnection a SqlCommand. VB.NET nerozlišuje mezi velkými a malými písmeny!

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Od toho je to klíčové slovo "Shadows", nebo se mýlím??

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Shadows dělá něco jiného, souvisí to s objekty a dědičností, ale je to hodně pokoričlá věc.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Usoudil jsem to podle toho, že mě

Dim Image As Image = ...

upozorní, že dojde k výjimce, ale po úpravě:

Shadows Image As Image = ...

bylo vše OK. Tak se těším až si od tebe o tom něco přečtu.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Jo, tak tady je to slovo Shadows proto, že Image je název vlastnosti formuláře nebo komponenty. Pokud chcete použít proměnnou stejného názvu, musíte použít Shadows, abyste překryl tuto vlastnost.

Každopádně doporučuji proměnné pojmenovávat jinak, třeba img, možností je vždycky dost.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Díky za poučení a díky i všem ostatním. Opravdu jsem asi nestudoval dost pečlivě - napravím to. (Už "to funguje").

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback