Could not find stored procedure '...'

0

Witam,
Parę lat temu przeszedłem kurs z C# na studiach, jeden semestr, był to zajęcia w konsoli, teraz wróciłem do C#, zgłębiam WPF. Mam pewien pomysł na aplikację z użyciem SQL. Jako, że jestem w tym zielony skorzystałem z tutoriala dostępnego w sieci.

Na tutorialu używana jest komenda:

sqlCmd.CommandType =.CommandType.StoredProcedure;

u mnie kompilator nakazuję dodanie przed System.Data....
Wywnioskowałem ze ta własnie linijka jest odpowiedzialna za pokazanie błędu "Could not find stored procedure "

Niżej załączam moje kody źródłowe

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Data.SqlClient;

namespace nowa_
{
    /// <summary>
    /// Logika interakcji dla klasy MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        SqlConnection sqlCon = new SqlConnection(@"Data Source = (localdb)\MSSQLLocalDB");
        public MainWindow()
        {
            InitializeComponent();
        }

        private void DODAJ_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                if (sqlCon.State == System.Data.ConnectionState.Closed)
                    sqlCon.Open();
                SqlCommand sqlCmd = new SqlCommand("UbraniaDodajAlboEdytuj", sqlCon);


                sqlCmd.CommandType =System.Data.CommandType.StoredProcedure;


                sqlCmd.Parameters.AddWithValue("@mode", "dodaj");
                sqlCmd.Parameters.AddWithValue("@Id", "0");
                sqlCmd.Parameters.AddWithValue("@TYP", TYP_TXT.Text.Trim());
                sqlCmd.Parameters.AddWithValue("@KOLOR", KOLOR_TXT.Text.Trim());
                sqlCmd.Parameters.AddWithValue("@ROZMIAR", ROZMIAR_TXT.Text.Trim());
                sqlCmd.Parameters.AddWithValue("@MARKA", MARKA_TXT.Text.Trim());
                sqlCmd.Parameters.AddWithValue("@OPIS", OPIS_TXT.Text.Trim());
                sqlCmd.Parameters.AddWithValue("@CENA","0");
                sqlCmd.Parameters.AddWithValue("@CENA_RZ","0");
                sqlCmd.Parameters.AddWithValue("@NR_SERYJNY", NR_SERYJNY_TXT.Text.Trim());
               // sqlCmd.Parameters.AddWithValue("@SPRZEDANE", SPRZEDANE);
                sqlCmd.ExecuteNonQuery();
                MessageBox.Show("Zapisano Poprawnie");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "bład 69");
            }
            finally
            {
                sqlCon.Close();
            }
        }
    }
}


stored procedure

CREATE PROCEDURE [dbo].UbraniaDodajAlboEdytuj

	 @mode nvarchar(10),
	@Id int, 
	@TYP nvarchar(50),
	@ROZMIAR nvarchar(50),
	@MARKA nvarchar(50),
	@OPIS nvarchar(50),
	@CENA int,
	@CENA_RZ int,
	@NR_SERYJNY nvarchar(50),
	@SPRZEDANE int
AS
  IF @mode='dodaj' 
BEGIN
INSERT INTO tbl_ubrania
	(
	TYP,
	ROZMIAR,
	MARKA,
	OPIS,
	CENA,
	CENA_RZ,
	NR_SERYJNY,
	SPRZEDANE)
	VALUES 
	(
	@TYP,
	@ROZMIAR,
	@MARKA,
	@OPIS,
	@CENA,
	@CENA_RZ,
	@NR_SERYJNY,
	@SPRZEDANE
	)

	END

Jeśli ten tutorial i takie podejście jest nie poprawne to prosił bym o jakiś tutorial/książkę o tworzeniu aplikacji w WPF z baza danych.

1
  1. jeśli chodzi o
    sqlCmd.CommandType = System.Data.CommandType.StoredProcedure;
    to możesz sobie zrobić na górze referencję, czyli:
    using System.Data;
    i napisać:
    sqlCmd.CommandType = CommandType.StoredProcedure;
    ale to nic nie zmieni.

  2. odnośnie tego która linijka wywala błąd to polecam zielonemu koledze ^^ postawić break pointa (w Visualu F9) na klamrze otwierającej funkcję, odpalić debuggera (F5) i przekakiwać kod krok po kroku (F10).

  3. I taka ogólna rada, która raczej niewiele zmieni tutaj, ale na dłużą metę może wiele razy uratować tyłek:
    SqlCommand sqlCmd = new SqlCommand("UbraniaDodajAlboEdytuj", sqlCon);
    Jeśli chcesz żeby garbage collector (taki ziomek w C# co to śmieci wynosi bo tobie się nigdy nie chce) był twoim przyjacielem to nie twórz obiektów klas w funkcjach, tylko bierz takie rzeczy z zewnątrz. Najpierw w klasie zrób sobie pole
    public partial class MainWindow : Window
    {
    private SqlCommand sqlCmd;
    a potem w metodzie instancję:
    private void DODAJ_Click(object sender, RoutedEventArgs e)
    {
    try
    {
    if (sqlCon.State == System.Data.ConnectionState.Closed)
    sqlCon.Open();
    sqlCmd = new SqlCommand("UbraniaDodajAlboEdytuj", sqlCon);

pozdrawiam, powodzenia

0

Wykonałeś ten skrypt tworzący procedure w bazie?

1

Jeżeli chodzi o błąd to na pierwszy rzut oka connection string może tu być problemem.

"Data Source = (localdb)\MSSQLLocalDB"

Podałeś namiar na serwer, ale nie podałeś do jakiej bazy ma się łączyć, procedure z kolei masz na konkretnej bazie. Tu masz podane przykłady jak to zrobić.

Ogólnie jeżeli chodzi o tutorial, to miej na uwadze, że to nie jest właściwy sposób, aby tworzyć tego typu aplikacje tylko najprostszy sposób, który będzie działał (na początek Ci to wystarczy). Normalnie jednak nie tworzy sie połączenia do bazy w oknie aplikacji i nie wykonuje procedur z tego miejsca.

0

Dzięki działa, racja nie było lokalizacji.Progress, a mógł byś porzucić jakieś książki albo tutoriale(mogą być płatnę) na które warto zwrócić uwagę? Zaczynam moją przygodę z WPF, ten program który teraz robię będę wykorzystywał komercyjnie w własnym biznesie( jest to jednocześnie projekt na zaliczenie stąd konieczne połączenie z bazami), przeszukałem trochę internetu ale nie za bardzo wiem od czego zacząć. Z góry dzięki za pomoc.

0

Przede wszystkim poszukaj informacji o wzorcu MVVM i jego wykorzystaniu przy tworzeniu aplikacji WPF. Nie pamiętam już z czego ja się uczyłem, ale pewnie był to jakiś hinduski tutorial na youtube :D

Ten tutorial na pierwszy rzut oka wydaje się sensowny, ale nie oglądałem więc nie ręczę ;)

PS. Oczywiście to wszystko przy założeniu, że znasz C#, bo w przeciwnym razie musisz zacząć od nauki samego języka.

1 użytkowników online, w tym zalogowanych: 0, gości: 1