Query parametriche

domenica 27 maggio 2007 - 19.51

_J_ Profilo | Senior Member

Salve a tutti!
Sono nuovo di qui ed ho deciso di iscrivermi perchè qui ho notato serietà e completezza nelle risposte che date. Complimenti davvero!!

Vorrei sottoporvi un problema: forse per voi sarà una cretinata, ma io lavoro ancora da poco con queste cose, e non ho ancora sufficiente pratica...
Qualcuno di voi saprebbe dirmi la sintassi per creare query parametriche ?
Lavoro in C# e uso visual studio 8...

mi servono per cercare dei record in un database in base a quello che scrivo in una casella di testo opportunamente creata...
E cioè come devo fare a far riconoscere il contenuto di una casella di testo opportunamente riempita da un utente...

Se ho un qcs del tipo:

string testo_digitato= TextBox1.Text; //casella di testo che l'utente riempirà

come faccio a far riconoscere 'testo_digitato' nella clausola 'where' in una query?
Cioè se ho un certo 'campo' in una 'tabella', nella query come esprimo il fatto che 'campo' deve contenere 'testo_digitato'?
select campo from tabella where campo= ....; //il confronto va fatto con ciò che è scritto nella textbox

Come posso cioè far riconoscere un parametro alla query?

Grazie 1000 in anticipo a chi mi risponderà!!

_J_

alx_81 Profilo | Guru

>Salve a tutti!
Ciao!
>Sono nuovo di qui ed ho deciso di iscrivermi perchè qui ho notato
>serietà e completezza nelle risposte che date. Complimenti davvero!!
Benvenuto su DNH e grazie a te per i complimenti.
>
>Vorrei sottoporvi un problema: forse per voi sarà una cretinata,
>ma io lavoro ancora da poco con queste cose, e non ho ancora
>sufficiente pratica...
>Qualcuno di voi saprebbe dirmi la sintassi per creare query parametriche
>?
>Lavoro in C# e uso visual studio 8...
Prima di tutto, che database utilizzi? SQL Server?
Per creare query parametrizzate, poi, devi conoscere ADO.net, hai dimestichezza con questa libreria?
Perchè devi utilizzare alcuni oggetti che è bene conoscere, prima di poterli utilizzare..
facci sapere!

>
>Grazie 1000 in anticipo a chi mi risponderà!!
Di nulla!

Alx81 =)

http://blogs.dotnethell.it/suxstellino

_J_ Profilo | Senior Member

ciao alx_81! Piacere di conoscerti!!
E grazie per la tua risposta...

uso il Mysql e per la connessione al database non ho problemi... quando ti riferisci ad ado.net parli di gridview, datalist e così via?

se sì, sto imparando adesso a maneggiarli, e sto incontrando difficoltà nel far processare dei parametri ad una query(come ti ho detto prima la clausola 'where' lavorerà in base ciò che digiterà un utente)

Ho provato anche con la creazione guidata di query del VS8 ma all'atto della creazione della where non mi riconosce i parametri...

come posso fare??

alx_81 Profilo | Guru

>uso il Mysql e per la connessione al database non ho problemi...
>quando ti riferisci ad ado.net parli di gridview, datalist e
>così via?
No, mi riferisco ad alcuni oggetti di cui sarebbe meglio possederne una buona conoscenza, anche se in effetti, alle prime armi, gli strumenti di Visual Studio ti permettono di renderteli trasparenti..
>
>se sì, sto imparando adesso a maneggiarli, e sto incontrando
>difficoltà nel far processare dei parametri ad una query(come
>ti ho detto prima la clausola 'where' lavorerà in base ciò che
>digiterà un utente)
>
>Ho provato anche con la creazione guidata di query del VS8 ma
>all'atto della creazione della where non mi riconosce i parametri...
>
>come posso fare??
Intanto ti consiglio di dare una letta a questo link
http://msdn2.microsoft.com/en-us/library/z72eefad(VS.80).aspx

poi qui di seguito hai un semplice esempio per darti un'idea di come implementare la parte parametrizzata di una query. Supponiamo di avere una tabella di mysql fatta in questo modo:

ID Nome Cognome
-----------------------------------------
1 Alessandro Alpi
2 Mike Denny
3 Marco Rossi
4 Massimo Preitano
5 Luca Ferrari

Nell'aspx utilizzeremo il SQLDataSource.
asp:SqlDataSource è un controllo che permette la scrittura di comandi sql verso il database, con le metodologie di accesso installate sulla macchina. Quindi, puoi andare via OLEDB verso mysql con una corretta connection string (guardati www.connectionstrings.com, puoi usare la "OLE DB, OleDbConnection (.NET)" ma dipende da che cosa hai installato per connetterti a mysql).
Detto questo, andiamo a scrivere l'aspx:


Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Come puoi notare, ho scritto due SQLDataSource, uno che fa la SELECT di tutti i record (per quando non inserisci nulla nella textbox) ed una che filtra per il parametro nome (vedi sezione <SelectParameters />). Uno senza parametri, l'altro coi parametri indicati col carattere "?", con sintassi OLEDB. Posizionalmente, ogni ? corrisponde ad un parametro.
Alla fine ho aggiunto un textbox ed un pulsante per eseguire la ricerca. Ecco cosa ho scritto nel vb alla pressione del pulsante:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

In questo modo, appena premi il pulsante, se hai immesso caratteri, ad essi viene concatenato un "%" (wildcard per SQL per ottenere lo stesso risultato di "*" in DOS, ovvero "tutti i caratteri") e il valore risultante è quello passato al parametro "nome", già definito nel SQLDataSource nell'aspx. Così facendo, si vanno a selezionare tutti i record che "iniziano per" TxtNome.Text. Inoltre imposto nella proprietà DataSourceID del GridView il nome del SQLDataSource che filtra, ovvero SQLFiltrato (dall'aspx).

Al contrario, se non vi sono caratteri, imposto semplicemente l'altro data source come sorgente dati. Quest'ultimo (SQLTutti) non richiede parametri e quindi visulaizza semplicemente il risultato della query in esso definita.

Spero di essermi spiegato. Non è un argomento molto corto, e ci sarebbero tante considerazioni da fare.. Per ora hai un esempio
Alx81 =)

http://blogs.dotnethell.it/suxstellino

_J_ Profilo | Senior Member

ciao! grazie per l'esempio!
adesso lo guarderò bene e lo adatterò al mio caso...

comunque ho dimenticato di dirti che uso C# e non VB....

alx_81 Profilo | Guru

>ciao! grazie per l'esempio!
>adesso lo guarderò bene e lo adatterò al mio caso...
>
>comunque ho dimenticato di dirti che uso C# e non VB....
>
vedrai che cambia poco


Alx81 =)

http://blogs.dotnethell.it/suxstellino

_J_ Profilo | Senior Member

ciao!

ho notato una cosa: i problemi me li dà se il database è mysql, mentre se uso un database sqlserver non ho problemi di alcun genere!!
La costruzione delle query parametriche mediante wizard mi riesce benissimo!

il formato dei database mysql è diverso da quello sqlserver... ho pensato alla stringa di connessione ma questa mi va benissimo, eccetto chiaramente nel caso delle query parametriche!

E' una cosa stranissima... sqlserver sì e my sql no...

alx_81 Profilo | Guru

>E' una cosa stranissima... sqlserver sì e my sql no...
se ti connetti a mysql via oledb, la sintassi che ti ho mandato è corretta..
se usi un altro connettore, non sono sicuro che cambi la sintassi, ma potrebbe essere..

Alx81 =)

http://blogs.dotnethell.it/suxstellino

_J_ Profilo | Senior Member

lo sai? Ho provato a creare una query con il ? nella where (prima usavo @) e mi funziona tutto benissimo, anche con database mysql! Non era questione di connessione (cmq i connettori che uso sono quelli che dici tu...)
lo script che mi hai postato è come quello che ho io, cambia solo la funzione (io uso c# che è diverso da vb come sintassi, ma la logica è quella...).. Grazie ancora!

Adesso c'è però un altro interrogativo che mi assilla...
hai presente il wizard delle query del VB8? ti permette di scegliere tra un elenco di tabelle o di creare da te la query...
nella finestra della scelta tabelle c'è poi il pulsante 'where...' che ti consente di definire le clausole where che si desiderano, e inoltre c'è anche 'Avanzate...' che dovrebbe permettere l'abilitazione delle insert, delete e della concorrenza ottimistica...
uso il condizionale perchè ho un problema proprio con questa finestra, infatti quando clicco su 'avanzate' la nuova finestra mi esce disabilitata, nel senso che non posso cliccare sulle checkbox per attivare le due opzioni di cui in precedenza...

mi potresti suggerire che fare per poter attivare quella finestra??
Scusami in anticipo se ti sto assillando, ma purtroppo la scarsa esperienza mi obbliga a farlo

_J_

alx_81 Profilo | Guru

>lo sai? Ho provato a creare una query con il ? nella where (prima
>usavo @) e mi funziona tutto benissimo, anche con database mysql!
>Non era questione di connessione (cmq i connettori che uso sono
>quelli che dici tu...)
Infatti il ? era proprio come ti indicavo nell'esempio. La @ va bene per SQL Server..

>lo script che mi hai postato è come quello che ho io, cambia
>solo la funzione (io uso c# che è diverso da vb come sintassi,
>ma la logica è quella...).. Grazie ancora!
Di nulla..
>
>Adesso c'è però un altro interrogativo che mi assilla...
>hai presente il wizard delle query del VB8? ti permette di scegliere
>tra un elenco di tabelle o di creare da te la query...
>nella finestra della scelta tabelle c'è poi il pulsante 'where...'
>che ti consente di definire le clausole where che si desiderano,
>e inoltre c'è anche 'Avanzate...' che dovrebbe permettere l'abilitazione
>delle insert, delete e della concorrenza ottimistica...
>uso il condizionale perchè ho un problema proprio con questa
>finestra, infatti quando clicco su 'avanzate' la nuova finestra
>mi esce disabilitata, nel senso che non posso cliccare sulle
>checkbox per attivare le due opzioni di cui in precedenza...
Partiamo dal presupposto che non uso mai wizard di quel tipo su VS8..
Però credo che sia un problema di chiave primaria..
Se fra i campi che selezioni per la query non metti anche la chiave, Visual Studio non è in grado, giustamente, di crearti il comando di DELETE, INSERT e UPDATE, che fanno riferimento proprio alla chiave stessa..
prova ad includerla nella selezione e vedrai che il tutto si attiverà
>
>mi potresti suggerire che fare per poter attivare quella finestra??
>Scusami in anticipo se ti sto assillando, ma purtroppo la scarsa
>esperienza mi obbliga a farlo
Figurati, ma ti consiglio di non usarli tanto i wizard.. non ti permettono di capire certe cose che "stanno dietro" che è comunque importante conoscere, anche per poter fare migliori analisi su prestazioni, sicurezza, e tutto ciò che si lega allo sviluppo delle applicazioni. Leggiti qualche link su MSDN e vedrai che riuscirai a farti dell'esperienza provando

Alx81 =)

http://blogs.dotnethell.it/suxstellino

_J_ Profilo | Senior Member

ok, non appena potrò proverò la cosa della primary key, anche se la cosa se non sbaglio mi succede se uso * per selezionare tutte le colonne, tra cui anche la chiave primaria...
poi ti dirò com'è andata!!!

_J_ Profilo | Senior Member

ciao, ho provato a fare come dici ma le checkbox non me le attiva cmq...
per le mie query uso * quindi la chiave primaria è inclusa...
cosa suggeriresti di fare?

_J_

alx_81 Profilo | Guru

>ciao, ho provato a fare come dici ma le checkbox non me le attiva
>cmq...
>per le mie query uso * quindi la chiave primaria è inclusa...
>cosa suggeriresti di fare?
Prova a passarmi lo script di create della tabella con tanto di chiavi e l'aspx del SQLDataSource che diamo un'occhiata


Alx81 =)

http://blogs.dotnethell.it/suxstellino

_J_ Profilo | Senior Member

innanzitutto scusa il ritardo con cui rispondo...
senti, mi è venuta un'illuminazione
non è che la mia connection string è impostata a sola lettura???
perchè pensandoci bene mi fa solo visualizzare i dati ma non mi permette di manipolarli in alcun modo...
non è che c'è un modo per impostare (e quindi anche togliere) il read-only per una connessione?

_J_

alx_81 Profilo | Guru

>innanzitutto scusa il ritardo con cui rispondo...
>senti, mi è venuta un'illuminazione
>non è che la mia connection string è impostata a sola lettura???
>perchè pensandoci bene mi fa solo visualizzare i dati ma non
>mi permette di manipolarli in alcun modo...
>non è che c'è un modo per impostare (e quindi anche togliere)
>il read-only per una connessione?
Prova a passarmi la connection string..e vediamo subito..
e se riesci passami anche quello che ti ho chiesto prima..

Alx81 =)

http://blogs.dotnethell.it/suxstellino

_J_ Profilo | Senior Member

ciao!
Ti mando in allegato quello che mi hai chiesto e... grazie in anticipo!

_J_

alx_81 Profilo | Guru

>ciao!
>Ti mando in allegato quello che mi hai chiesto e... grazie in
>anticipo!
Allora.. ho provato.. ho messo la connectionstring in questo modo:

Provider=MySQLProv; Initial Catalog=DATABASE; Data Source=SERVER; User Id=USER; Password=PASSWORD;

è oledb, e funziona..
Prova a cambiarla anche tu (anche se non so se il provider che utilizzi tu è quello, guarda su www.connectionstrings.com per vedere quale stringa di connessione è più adatta).
Non ho riscontrato problemi di alcun tipo.
Prova a mettere la connection string come indicato (e comunque segui le istruzioni del sito).. perchè non saprei che altro dire..

Alx81 =)

http://blogs.dotnethell.it/suxstellino

_J_ Profilo | Senior Member

ciao!
il provider che uso è .NET Framework Data Provider for ODBC che mi dà lui...andrebbe bene comunque?
Inoltre nel sito che mi hai consigliato non ho visto alcuna proprietà 'Initial Catalog=DATABASE' nelle connectionstring...
da dove l'hai preso?

Inoltre guardando bene le proprietà del mio gridView ho notato che ci sono:
AutoGenerateDeleteButton
AutoGenerateSelectButton
AutoGenerateEditButton
AutoGenerateColumn
che una volta attivati permettono le insert, delete, ecc... (non c'è l'insert.... sarà incluso nell'edit?) senza modificare la stringa di connessione...

Le ho attivate tutte eccetto la select sennò mi crea problemi...
inoltre affinchè funzionino devo impostare le query di delete (DeleteCommand), update(updateCommand) ecc... in
entrambi
i SqlDataSource1 e 2 .

Ho provato a vedere se funzionano impostando una delete per cancellare tutti i dati nel database e mi funziona, a patto che, come ho detto prima, devo prima impostare tali query in entrambi i sqlDataSource, sennò non va...
Adesso mi sorge il dubbio: e se volessi cancellare solo una riga?

_J_

Cteniza Profilo | Guru

Ho fatto qualche giochino con mysql e visual studio 2005, il resoconto nel mio blog:
http://community.visual-basic.it/lucianob/archive/2007/05/26/19458.aspx
Magari può interessare.

alx_81 Profilo | Guru

>ciao!
Ciao!

>il provider che uso è .NET Framework Data Provider for ODBC che
>mi dà lui...andrebbe bene comunque?
E' sicuramente più lento, non sarebbe male installarsi il connector .Net..
http://dev.mysql.com/downloads/connector/net/5.0.html

>Inoltre nel sito che mi hai consigliato non ho visto alcuna proprietà
>'Initial Catalog=DATABASE' nelle connectionstring...
>da dove l'hai preso?
come ti ho già detto, la mia connectionstring è per la connessione oledb e quindi, guardando sul sito che ti avevo indicato (http://www.connectionstrings.com/?carrier=mysql), vedrai la stringa simile alla mia..

>
>Inoltre guardando bene le proprietà del mio gridView ho notato
>che ci sono:
>AutoGenerateDeleteButton
>AutoGenerateSelectButton
>AutoGenerateEditButton
>AutoGenerateColumn
>che una volta attivati permettono le insert, delete, ecc... (non
>c'è l'insert.... sarà incluso nell'edit?) senza modificare la
>stringa di connessione...
le proprietà che menzioni, non c'entrano con la stringa di connessione. Sono proprietà del controllo che creano dinamicamente ed automaticamente i pulsanti per eseguire le operazioni personalizzate di edit e delete. Non solo, il select ti rende selezionata una riga e la proprietà AutoGenerateColumns ti evita di dover definire le colonne, popolando il controllo con le colonne indicate nella query del data source.
Per quanto riguarda la insert, devi usare controlli diversi, come il DetailsView
http://msdn2.microsoft.com/en-us/library/s3w1w7t4.aspx
e
http://msdn2.microsoft.com/en-us/library/system.web.ui.webcontrols.detailsview.autogenerateinsertbutton.aspx

>
>Le ho attivate tutte eccetto la select sennò mi crea problemi...
>inoltre affinchè funzionino devo impostare le query di delete
>(DeleteCommand), update(updateCommand) ecc... in entrambi i
>SqlDataSource1 e 2 .
certo

>
>Ho provato a vedere se funzionano impostando una delete per cancellare
>tutti i dati nel database e mi funziona, a patto che, come ho
>detto prima, devo prima impostare tali query in entrambi i sqlDataSource,
>sennò non va...
certo, e il wizard che usavi prima non te le faceva creare. Quello che avresti creato sarebbe stato messo proprio nelle proprietà che hai valorizzato tu a manina (DeleteCommand e UpdateCommand).

>Adesso mi sorge il dubbio: e se volessi cancellare solo una riga?
ma come? il delete command è proprio la cancellazione della riga!!
Devi impostare il parametro della chiave e valorizzarlo all'atto della cancellazione!!
leggiti bene questo link
http://msdn2.microsoft.com/it-it/library/system.web.ui.webcontrols.gridview(VS.80).aspx

e cerca di soffermarti sulla parte che gestisce l'update e la delete parametrizzate..
ciao!
Alx81 =)

http://blogs.dotnethell.it/suxstellino

_J_ Profilo | Senior Member

ciao!
con la delete tutto ok (non appena mi sono sconnesso dal forum è andato tutto bene...) , in effetti le cancellazioni avvengono in base ai parametri specificati... (delete from login where username=? mi funziona benissimo)

Le pagine che mi hai consigliato già le avevo viste, eccetto quella del formview... grazie comunque per avermele consigliate

Il problema è per le insert... sto usando in effetti un DetailsView per inserire dei record nuovi, e scrivendo la query
INSERT INTO login VALUES (?, ?, ?, ?, ?); // i nomi delle colonne sono facoltativi se non sbaglio
mi dice sempre che il campo della tabella riferito al primo ? non può essere null...
ho pensato ad un errore a causa di?, ma se uso @ mi dice chiaramente che la sintassi sql è errata...

Ho provato poi a specificate i nomi delle colonne nella insert, ma qualsiasi cosa scrivo mi dice sempre che il campo relativo al primo ? non deve essere null
ad es se scrivo INSERT INTO login (cognome_utente, ID_user, nome_utente_ password e username) VALUES (?, ?, ?, ?, ?);
mi dice che 'cognome_utente' non può essere null... sebbene io riempia TUTTI i campi che escono quando scelgo l'inserimento dal detailsview...
se invece scrivo INSERT INTO login(ID_user, username, password, nome_utente_cognome_utente) VALUES (?, ?, ?, ?, ?);
mi dice che 'ID_user' non può essere null

come mai ho cambiato l'ordine dei campi nella insert?
devi sapere che all'atto della creazione della tabella 'login' l'ordine dei campi era "ID_user, username, password, nome_utente_cognome_utente"
ma VS8 nel server explorer mi ha cambiato l'ordine in "cognome_utente, ID_user, nome_utente_ password, username"...
senza alcun motivo... quindi non so che ordine usa... sono tentata di ricreare la connessione...

il bello è che poi una volta che vado a inserire dei record dopo aver cliccato su 'nuovo' nel detailsview l'ordine dei campi da riempire è come lo avevo specificato all'inizio !!!!! (ID_user per primo)...

che sta succedendo?
comunque ti ringrazio per la tua disponibilità e scusami per la stupidità di tante domande che ti faccio...

_J_

alx_81 Profilo | Guru

>ciao!
ciao

>con la delete tutto ok (non appena mi sono sconnesso dal forum
>è andato tutto bene...) , in effetti le cancellazioni avvengono
>in base ai parametri specificati... (delete from login where
>username=? mi funziona benissimo)
>Le pagine che mi hai consigliato già le avevo viste, eccetto
>quella del formview... grazie comunque per avermele consigliate
bene

>Il problema è per le insert... sto usando in effetti un DetailsView
>per inserire dei record nuovi, e scrivendo la query
>INSERT INTO login VALUES (?, ?, ?, ?, ?); // i nomi delle colonne
>sono facoltativi se non sbaglio
>mi dice sempre che il campo della tabella riferito al primo ?
>non può essere null...
>ho pensato ad un errore a causa di?, ma se uso @ mi dice chiaramente
>che la sintassi sql è errata...
no, i nomi delle colonne non sono sempre facoltativi. Se non consideri tutto il record ma solo alcuni campi ad esempio, devi indicarli.
l'errore che ti dà sembra proprio riferito al fatto che il valore che gli passi è prorpio null..
>
>Ho provato poi a specificate i nomi delle colonne nella insert,
>ma qualsiasi cosa scrivo mi dice sempre che il campo relativo
>al primo ? non deve essere null
si vede che sulla tabella hai il campo non nullable e cerchi di inserire null in quel campo, è l'unica.. l'errore è piuttosto esplicativo
fai un bel debug approfondito e controlla che effettivamente quei parametri siano valorizzati, perchè non sembra

>ad es se scrivo INSERT INTO login (cognome_utente, ID_user, nome_utente_
>password e username) VALUES (?, ?, ?, ?, ?);
>mi dice che 'cognome_utente' non può essere null... sebbene io
>riempia TUTTI i campi che escono quando scelgo l'inserimento
>dal detailsview...
>se invece scrivo INSERT INTO login(ID_user, username, password,
>nome_utente_cognome_utente) VALUES (?, ?, ?, ?, ?);
>mi dice che 'ID_user' non può essere null
>
>come mai ho cambiato l'ordine dei campi nella insert?
>devi sapere che all'atto della creazione della tabella 'login'
>l'ordine dei campi era "ID_user, username, password, nome_utente_cognome_utente"
>ma VS8 nel server explorer mi ha cambiato l'ordine in "cognome_utente,
>ID_user, nome_utente_ password, username"...
>senza alcun motivo... quindi non so che ordine usa... sono
>tentata di ricreare la connessione...
Ma questo non ti interessa.. l'insert ignora l'ordine dei campi
L'importante è che l'ordine delle colonne indicate nello statement di inserimento sia posizionalmente riferito a quello della VALUES..
>
>che sta succedendo?
>comunque ti ringrazio per la tua disponibilità e scusami per
>la stupidità di tante domande che ti faccio...
non ti preoccupare.. le domande non sono stupide
>
>_J_
>

Alx81 =)

http://blogs.dotnethell.it/suxstellino

_J_ Profilo | Senior Member

in effetti il primo campo è not null, è una chiave primaria... eppure quando cerco di inserire un nuovo record mi dà dei problemi proprio perchè dice che è null, mentre io in effetti scrivo su TUTTI i campi per creare record nuovi... ma dice che lo stesso il primo campo è null...

scusa, come mai vede null se a quanto ho capito il ? indica un parametro opportunamente collegato ad un controllo...
forse mi sfugge qcs circa il ?...

_J_

alx_81 Profilo | Guru

>in effetti il primo campo è not null, è una chiave primaria...
>eppure quando cerco di inserire un nuovo record mi dà dei problemi
>proprio perchè dice che è null, mentre io in effetti scrivo su
>TUTTI i campi per creare record nuovi... ma dice che lo stesso
>il primo campo è null...
Se ti dice così, c'è poco da fare.. vuol dire che a database gli arriva il null..
per questo ti consiglio di fare un debug molto approfondito per verificare i valori dei parametri.
>
>scusa, come mai vede null se a quanto ho capito il ? indica un
>parametro opportunamente collegato ad un controllo...
>forse mi sfugge qcs circa il ?...
Dipende come dichiari i parametri. Se sono control parameters sì, altrimenti devi valorizzarli tu.
Nell'esempio che ti ho fatto infatti li valorizzo da codice..
>
>_J_

Alx81 =)

http://blogs.dotnethell.it/suxstellino

Cteniza Profilo | Guru

In presenza di una chiave primaria (che al 999% non vuole i null) per far scattare il trigger / calcolo automatico del nuovo id, per le chiavi "contatore" semplicemente il campo non deve essere neanche citato.
Esempio:
tabella con id, descrizione
INSERT INTO tabella (descrizione) VALUES ('descrizione')

alx_81 Profilo | Guru

>In presenza di una chiave primaria (che al 999% non vuole i null)
>per far scattare il trigger / calcolo automatico del nuovo id,
>per le chiavi "contatore" semplicemente il campo non deve essere
>neanche citato.
Ma come sai che è una colonna identity la sua chiave?
se è una chiave non autoincrementante, la deve inserire lui ed indicarla eccome..
poi l'errore che riceve, dice che non è possibile inserire valori null, non che sono inaccessibili (readonly nel caso degli identity).
Quindi sembra proprio che quei parametri non siano proprio valorizzati prima dell'esecuzione del comando.

Alx81 =)

http://blogs.dotnethell.it/suxstellino

Cteniza Profilo | Guru

>Ma come sai che è una colonna identity la sua chiave?
>se è una chiave non autoincrementante, la deve inserire lui ed
>indicarla eccome..
>poi l'errore che riceve, dice che non è possibile inserire valori
>null, non che sono inaccessibili (readonly nel caso degli identity).
>Quindi sembra proprio che quei parametri non siano proprio valorizzati
>prima dell'esecuzione del comando.
>
>Alx81 =)
>
>http://blogs.dotnethell.it/suxstellino
Certamente, allora tutta la discussione sul fatto dei null non ha proprio senso, se la chiave primaria non è autoincrementante devi comunicare un valore non nullo.

_J_ Profilo | Senior Member

Ciao ragazzi...
vi ringrazio per l'interessamento e negli ultimi due giorni ho sbattuto parecchio con i ?... ma alla fine mi è venuta un'altra illuminazione: ho cambiato dbms e sono semplicemente passato da mysql a sqlserver... e indovinate un po? tutto mi va alla perfezione...insert, delete, tutto alla perfezione...
allora era la connessione a mysql che non lavorava come doveva...
non ho problemi nemmeno con le chiavi o altro... infatti sapevo che impostando i campi come indexer non c'è bisogno che imposto la chiave primaria ogni volta, fa tutto da solo.... ma il problema non era la chiave primaria in sè, ma il primo campo che legge, a prescindere dal campo stesso: vedeva tutto come null...
ho fatto delle prove col sqlserver ed adesso è tutto ok...

comunque vi ringrazio tanto entrambi, soprattutto alx_81 a cui sicuro avrò fatto venire minimo un esaurimento nervoso come quello che avevo io prima di risolvere il problema (che brutta cosa l'nesperienza dell'inizio... spero di diventare come te un giorno...)

Grazie infinitamente del tempo dedicatomi
_J_


"Chi fa domande rischia di sembrare stupido,
chi non ne fa rischia di restare stupido..."

"Conosco me stesso? No, non parlo con gli estranei..."

alx_81 Profilo | Guru

>Ciao ragazzi...
Ciao!

>vi ringrazio per l'interessamento e negli ultimi due giorni ho
>sbattuto parecchio con i ?... ma alla fine mi è venuta un'altra
>illuminazione: ho cambiato dbms e sono semplicemente
>passato da mysql a sqlserver...
Non vorrei essere di parte, ma sono completamente d'accordo col tuo cambiamento!!

>e indovinate un po? tutto mi
>va alla perfezione...insert, delete, tutto alla perfezione...
>allora era la connessione a mysql che non lavorava come doveva...
>non ho problemi nemmeno con le chiavi o altro... infatti sapevo
>che impostando i campi come indexer non c'è bisogno che imposto
>la chiave primaria ogni volta, fa tutto da solo.... ma il problema
>non era la chiave primaria in sè, ma il primo campo che legge,
>a prescindere dal campo stesso: vedeva tutto come null...
>ho fatto delle prove col sqlserver ed adesso è tutto ok...
>
>comunque vi ringrazio tanto entrambi, soprattutto alx_81 a cui
>sicuro avrò fatto venire minimo un esaurimento nervoso come quello
>che avevo io prima di risolvere il problema
Ah sto malissimo, credimi . Figurati nessun problema!!

>(che brutta cosa l'nesperienza dell'inizio... spero di diventare come
>te un giorno...)
Spera di diventare meglio.. ma mooooooolto.. cmq grazie!
>
>Grazie infinitamente del tempo dedicatomi
>_J_
di nulla!
>
>
>"Chi fa domande rischia di sembrare stupido,
>chi non ne fa rischia di restare stupido..."
bellissima
>
>"Conosco me stesso? No, non parlo con gli estranei..."
anche questa..
ps: ma per caso ti piace Alessandro Bergonzoni? lo stile è quello

Alx81 =)

http://blogs.dotnethell.it/suxstellino

_J_ Profilo | Senior Member

"Conosco me stesso? No, non parlo con gli estranei..." è una frase che ho visto da qualche parte, ma non ricordo dove... però mi ha colpita parecchio...

invece "Chi fa domande rischia di sembrare stupido, chi non ne fa rischia di restare stupido..." più che una grande frase è una grande verità

e per quel che riguarda i complimenti, li hai meritati

_J_
"Chi fa domande rischia di sembrare stupido,
chi non ne fa rischia di restare stupido..."

"Conosco me stesso? No, non parlo con gli estranei..."
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5