Welcome to Sign in | Help
in Search

Parametrii OldDbParameter, Update query si baza de date Access

Last post 10-01-2007, 3:34 PM by B_gd_n[ ]Sahlean. 4 replies.
Sort Posts: Previous Next
  •  10-01-2007, 12:32 PM 2807

    Parametrii OldDbParameter, Update query si baza de date Access

    Salut,

        Nu stiu care e problema cu codul de mai jos si poate ma ajuta cineva.

       Operatia de update de mai jos are success daca in loc de parametrul "@revision" in codul sql pun direct valoarea. Daca in schimb utilizez parametru, ExecuteNonQuery returneaza 0. Si nu inteleg de ce?

        Pentru baze de date Access nu functioneaza parametrii cum trebuie?

     

    Alta intrebare ar fi de ce nu merge atunci cand inserez valoarea DBNull.Value intr-un camp care permite valori null.


                            cmd.Parameters.Clear();

                cmd.CommandText = "UPDATE Part SET " +
                            "revision = @revision" +
                            " WHERE (partId = @partId)";

                cmd.Parameters.AddWithValue("@partId", partId);

               cmd.Parameters.AddWithValue("@revision", 1);

                int result = cmd.ExecuteNonQuery();

     

     

    mersi mult 

  •  10-01-2007, 1:32 PM 2812 in reply to 2807

    Re: Parametrii OldDbParameter, Update query si baza de date Access

    Incearca

     cmd.CommandText = "UPDATE Part SET revision = " +  rev  +  "WHERE (PartID = "  +  part_id.ToString()  +  ")".

    rev si part_id sunt variabile din codul C#. Ideea este sa concatenezi partile "fixe" din statement-ul SQL cu valorile ( eventual "ToString()") ale variabilelor

    * Daca am inteles bine, lucrezi pe o baza Access. Pentru o baza de SQL  "adevarata" Smile as recomanda folosirea unei proceduri stocate care sa faca update-ul.

  •  10-01-2007, 2:12 PM 2815 in reply to 2812

    Re: Parametrii OldDbParameter, Update query si baza de date Access

    De fapt ar putea fi:

     cmd.CommandText = "UPDATE Part SET revision = " +  rev.ToString()  +  " WHERE (PartID = "  +  part_id.ToString()  +  ")".

    Ar fi bine sa fie un spatiu intre " si WHERE pentru ca altfel vei obtine:

    "UPDATE ... revision = 0WHERE ..."

     

    Daca folosesti aceasta solutie trebuie as acorzi atentie si unor posibile atacuri tip SQL injection. Cu alte cuvinte trebuie sa validazi validezi valorile variabilelor rev si pard_id.

     

    Diana: ce intelegi prin  "baza SQL adevarata" ? Sa intelegem ca exista si "baze SQL false" ?

  •  10-01-2007, 2:52 PM 2816 in reply to 2815

    Re: Parametrii OldDbParameter, Update query si baza de date Access

    Scuze pentru:

    1. spatiul lipsa.

    2. mica rautate fata de Access. Am folosit "adevarat" in sensul putin mai "de cartier" al cuvantului.

    Desigur ca datele de intrare trebuie validate - o posibilitate ar fi folosirea validatorilor in aplicatia .NET.


  •  10-01-2007, 3:34 PM 2817 in reply to 2816

    Re: Parametrii OldDbParameter, Update query si baza de date Access

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Data;
    using System.Data.OleDb;

    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                string strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=H:\\bd\\test.mdb";
                string strSQL = "UPDATE Factura SET CodFactura = CodFactura*10 WHERE CodFactura = ?";
                OleDbConnection objCon = new OleDbConnection(strCon);
                OleDbCommand objCmd = new OleDbCommand(strSQL, objCon);
                objCmd.CommandType = CommandType.Text;
                objCmd.Parameters.AddWithValue("PrimulParametru", 100);
                objCon.Open();
                int iRez = objCmd.ExecuteNonQuery();
                objCon.Close();

                Console.Write("Rezultat executie UPDATE {0}", iRez);
                Console.ReadLine();
            }
        }
    }

    ExecuteNonQuery returneaza numarul inregistrarilor care au fost modificate (UPDATE) in acest caz. Daca ExecuteNonQuery returneaza 0 inseamna ca nu au fost modificate inregistrarile (nici o inregistrare) si asta pentru nu exista valori care sa verifice conditiile din WHERE pentru a putea fi realizata minim o modificare. Daca ai campuri de tip CHAR/VARCHAR si derivate implicate in conditiile din WHERE atentie la spatii.

View as RSS news feed in XML
Powered by Community Server (Commercial Edition), by Telligent Systems