Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Pomoc za SELECT kolone kojoj se vrednost poveca za 1

elitemadzone.org :: MadZone :: Pomoc za SELECT kolone kojoj se vrednost poveca za 1

[ Pregleda: 3584 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

JovBre

Član broj: 301208
Poruke: 9
*.dynamic.sbb.rs.



Profil

icon Pomoc za SELECT kolone kojoj se vrednost poveca za 110.04.2012. u 13:21 - pre 146 meseci
Pozdrav svima! Potrebna mi je hitno pomoc. Radim neki zadatak (wpf aplikacija u c#) sa SQL bazom. Trazi se da iz liste izaberemo neki proizvod i da mu se cena na klik poveca za 1. Probala sam ovako to da resim

Code:
 private void listBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            {
                               
                SqlConnection conn = new SqlConnection(@"Data Source=JOVANA-PC;Initial Catalog=aukcije;Integrated Security=True");     
                conn.Open();
                SqlDataAdapter DA = new SqlDataAdapter("USE aukcije; UPDATE aukcije SET cena1 = cena1 + 1 ",conn);
                DataTable cena1 = new DataTable();
                DA.Fill(cena1);
                conn.Close(); 
    
            }
        }

ali mi poveca cenu svake stavke u listi, a ne izabrane. Kako da uspem da selektujem jednu stavku u koloni i da mi se samo ona update-uje?

hvala unapred!
 
Odgovor na temu

Zidar
Canada

Član broj: 15387
Poruke: 3085
*.100.46-69.q9.net.



+79 Profil

icon Re: Pomoc za SELECT kolone kojoj se vrednost poveca za 110.04.2012. u 16:04 - pre 146 meseci
Ne razumem se u C# ali tvoj SQL nije dobar:

USE aukcije;
UPDATE aukcije SET cena1 = cena1 + 1

Ovako napisano, menja cene u celoj tabeli. Ono sto tebi treba je nesto sto bi uradilo ovo:

USE aukcije;
UPDATE aukcije SET cena1 = cena1 + 1
WHERE ArtiklID = <onaj artikl koji je izabran u listi>

Ako hoces ozbiljno da radis, onda je najbolje da u SQL bazi napravis stored proceduru koja prima jedna parametra, ArtiklID i povecava mu cenu za 1. Onda iz tvog koda pozoves tu proceduru. Procedura ce uvek primiti samo jedan parametra, sve ostalo bice odbijeno, transakcija nece proci.


Primer procedure, u najjednostavnijem obliku:
CREATE PROCEDURE uspPovecajCenuArtiklaZaJedan
@ArtikLID int
AS
UPDATE aukcije SET cena1 = cena1 + 1
WHERE ArtiklID = @ArtikLID
;
GO

Kako bi izgledao C# kod koji poziva ovu proceduru i salje parametar - ono sto je korisnik kliknuo u pdajucoj listi, to ne znam, to je tvoj deo posla.

Usput, sta je 'wpf' ?

 
Odgovor na temu

plague
Software Developer
Auckland, NZ

Član broj: 46734
Poruke: 623
*.aDSL.verat.net.



+373 Profil

icon Re: Pomoc za SELECT kolone kojoj se vrednost poveca za 110.04.2012. u 16:24 - pre 146 meseci
Code (csharp):

     using (SqlConnection conn = new SqlConnection())
     {
          conn.ConnectionString = "...";
          SqlCommand command = conn.CreateCommand();
          command.CommandType = CommandType.StoredProcedure;
          command.CommandText = "Ime procedure";
          command.Parameters.AddWithValue("@ImeParametraUProceduri", vrednost_parametra);
          conn.Open();
          command.ExecuteNonQuery();
     }
 


Also Introduction to WPF
 
Odgovor na temu

JovBre

Član broj: 301208
Poruke: 9
*.dynamic.sbb.rs.



Profil

icon Re: Pomoc za SELECT kolone kojoj se vrednost poveca za 110.04.2012. u 17:54 - pre 146 meseci
Ok, napravila sam proceduru u SQLu:
Code:
CREATE PROCEDURE uspPovecajCenuArtiklaZaJedan 
@ArtikLID int
AS
UPDATE aukcije SET cena1 = cena1 + 1
WHERE RedniBrojAukcije = @ArtikLID
;
GO


i u c# programu sam odradila ovako:
Code:
 using (SqlConnection conn = new SqlConnection())
           {
               conn.ConnectionString =( @"Data Source=JOVANA-PC;Initial Catalog=aukcije;Integrated Security=True");
               SqlCommand command = conn.CreateCommand();
               command.CommandType = CommandType.StoredProcedure;
               command.CommandText = "uspPovecajCenuArtiklaZaJedan";
               command.Parameters.AddWithValue("@RedniBrojAukcije", "ArtiklID");
               conn.Open();
               command.ExecuteNonQuery();
           }

ali dobijam gresku
An unhandled exception of type 'System.Data.SqlClient.SqlException' occurred in System.Data.dll

Additional information: Procedure or function 'uspPovecajCenuArtiklaZaJedan' expects parameter '@ArtikLID', which was not supplied.

Gde sam pogresila? :\
Hvala na pomoci :)

[Ovu poruku je menjao JovBre dana 10.04.2012. u 19:05 GMT+1]
 
Odgovor na temu

plague
Software Developer
Auckland, NZ

Član broj: 46734
Poruke: 623
*.aDSL.verat.net.



+373 Profil

icon Re: Pomoc za SELECT kolone kojoj se vrednost poveca za 110.04.2012. u 18:22 - pre 146 meseci
Parametar koji dodajes komandi treba se zvati kao parametar u proceduri koji je @ArtikLID.
Zameni @RedniBrojAukcije sa @ArtikLID

Dalje vrednost parametra treba biti nesto tipa listBox1.SelectedValue, tu prosledjujes vrednost koju ce imati parametar.

Zamisli kao da je @ArtikLID promenljiva i trebas joj dodeliti vrednost da bi posle u proceduri on mogao da uzme vrednost parametra i iskoristi ga.
 
Odgovor na temu

JovBre

Član broj: 301208
Poruke: 9
*.dynamic.sbb.rs.



Profil

icon Re: Pomoc za SELECT kolone kojoj se vrednost poveca za 110.04.2012. u 18:44 - pre 146 meseci
Ok, jasno, sad smo prevazisli to... ali se javlja sledece
An unhandled exception of type 'System.ArgumentException' occurred in System.Data.dll

Additional information: No mapping exists from object type System.Data.DataRowView to a known managed provider native type.
i markira mi command.ExecuteNonQuery();

Izvinjavam se ako smaram, pocetnik sam u ovome.
 
Odgovor na temu

plague
Software Developer
Auckland, NZ

Član broj: 46734
Poruke: 623
*.aDSL.verat.net.



+373 Profil

icon Re: Pomoc za SELECT kolone kojoj se vrednost poveca za 110.04.2012. u 19:11 - pre 146 meseci
Kada si vezivala listBox1 verovatno nisi vezala ValueMember tako da umesto da pokupi vrednost (ID itema) on kupi ono sto pise sto izgleda nije broj.

Probaj prilikom debuga da vidis koji vrednost ima to sto pokusavas da dodelis parametru.
 
Odgovor na temu

JovBre

Član broj: 301208
Poruke: 9
*.dynamic.isp.telekom.rs.



Profil

icon Re: Pomoc za SELECT kolone kojoj se vrednost poveca za 111.04.2012. u 12:11 - pre 146 meseci

Uh ne znam sta da uradim konkretno... Evo i xaml i xaml.cs koda, pa ako neko moze da napise gde treba izmena, i kakva, da bi mi ovo konacno proradilo.
Imam zadatak da se kreira WPF aplikacija (C#) za aukcijsku prodaju. Napravila sam SQL bazu i imam u aplikaciji listbox koji prikazuje sve aukcije i textbox koji pokazuje cenu odabrane aukcije. To je nazalost sve sto sam sama uspela..
Potrebno je jos:
1) da ubacim neki tajmer koji ce u intervalu od jedne sekunde vaditi iz baze sve aktuelne aukcije i prikazati ih u listboxu i
2) kada korisnik klikne na neku stavku iz liste, da se poveca cena proizvoda na koji je kliknuo.

Evo sta je gotovo za sad:
MainWindow.xaml

Code:

<Window x:Class="WpfApplication8.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="388" Width="538" >
    <Grid Height="199">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="Auto" />
        </Grid.ColumnDefinitions>
        <ListView  IsSynchronizedWithCurrentItem="True" ItemsSource="{Binding}" Height="206" HorizontalAlignment="Left" Margin="20,-19,0,0" Name="listBox1" VerticalAlignment="Top" Width="479" Grid.ColumnSpan="2" >           
                
            <ListView.View>                
                <GridView ColumnHeaderToolTip="Aukcije">
                    <GridViewColumn DisplayMemberBinding="{Binding Path=NazivAukcije}" Header="NazivAukcije" Width="300"/>
                    <GridViewColumn DisplayMemberBinding="{Binding Path=Cena1}"  Header="Cena" Width="150  "/>                    
                </GridView>        
            </ListView.View>
        
          </ListView>
        <TextBlock Height="32" HorizontalAlignment="Left" Margin="-1,-72,0,0" Name="textBlock1" Text="Aukcijska prodaja" VerticalAlignment="Top" Width="517" Grid.ColumnSpan="2" TextAlignment="Center" FontFamily="Verdana" FontSize="18" FontWeight="SemiBold" Foreground="#FF137CF5" />
        
        
    </Grid>
</Window>


i MainWindow.xaml.cs

Code:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
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;
using System.Data.SqlClient;
using System.Timers;
using System.Windows.Threading;

namespace WpfApplication8
{
   
    public partial class MainWindow : Window
    {
             
        public MainWindow()
        {
            InitializeComponent();

            DataTable aukcijeTable = new DataTable();
            SqlConnection conn = new SqlConnection(@"Data Source=\.JOVANA;Initial Catalog=aukcije;Integrated Security=True");
            SqlDataAdapter aukcDa = new SqlDataAdapter("select * from aukcije", conn);
            
            aukcDa.Fill(aukcijeTable);
            listBox1.DataContext = aukcijeTable;
            
        }

          private void listBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
            {
              using (SqlConnection conn = new SqlConnection())
               {
                   conn.ConnectionString =( @"Data Source=\.JOVANA;Initial Catalog=aukcije;Integrated Security=True");
              
                   SqlCommand command = conn.CreateCommand();
                   command.CommandType = CommandType.StoredProcedure;
                   command.CommandText = "uspPovecajCenuArtiklaZaJedan";
                   command.Parameters.AddWithValue("@ArtikLIDe", listBox1.SelectedValue);
                   conn.Open();
                   command.ExecuteNonQuery();
               }                                           
             }

        /*   Javlja se greska -An unhandled exception of type 'System.ArgumentException' occurred in System.Data.dll
Additional information: No mapping exists from object type System.Data.DataRowView to a known managed provider native type.
          Uradjeno je ovo gore preko sql uskladistene procedure. Dakle klikom na selektovani red povecava se cena.
         Treba negde da povezem listbox1.SelectedValue verovatno sa ValueMember, ali gde i kako? :( */
        

        private void DispatcherTimer(object sender, RoutedEventArgs e)
        {
            DispatcherTimer dispatcherTimer = new DispatcherTimer();
            dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);
            dispatcherTimer.Interval = new TimeSpan(0, 0, 1);
            dispatcherTimer.Start();
        }

       private void dispatcherTimer_Tick(object sender, EventArgs e)
        {
           SqlCommandBuilder cb = new SqlCommandBuilder(aukcDa);
           aukcDa.Update(aukcijeTable);
           Console.WriteLine("Aukcije updated successfully");
           Console.ReadLine();
       }
        
       public SqlDataAdapter aukcDa { get; set; } /*Jel ok ovo? Jer mi nije prepoznavao aukcDa i aukcijeTable, 
        pa mi ovo ponudio da generise. */

       public DataTable aukcijeTable { get; set; }

       
    }
      }

 
Odgovor na temu

JovBre

Član broj: 301208
Poruke: 9
*.dynamic.isp.telekom.rs.



Profil

icon Re: Pomoc za SELECT kolone kojoj se vrednost poveca za 111.04.2012. u 12:15 - pre 146 meseci
Izmena:
Potrebno je jos da prodadi ono pod 1 i 2 :) ne da se pravi od pocetka. Nadam se da ce neko pomci, bas mi je bitno i hitno.
Hvala unapred.
 
Odgovor na temu

elitemadzone.org :: MadZone :: Pomoc za SELECT kolone kojoj se vrednost poveca za 1

[ Pregleda: 3584 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.