|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
[C#] MySqlParameter e tabelle case sensitive
Riscontro un problema nell'utilizzo dei MySqlParameter con un MySql su Linux dove qualche disgraziato ha creato le tabelle con i nomi tutti in maiuscolo.
In sostanza quando vado ad eseguire la query ottengo che la tabella non esiste e nell'errore il nome della tabella riportato è tutto minuscolo. C'è qualche opzione lato codice che consente di specificare di non alterare il testo della query, quando si usano i parametri? Non ho accesso alla macchina database nè ho modo di modificarne le impostazioni o alterare le tabelle. Al momento ho messo una pezza componendo la query a mano, ma chiaramente la soluzione è decisamente inadeguata. |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
L'essere case sensitive e' uno dei parametri di MySql.
Per aderire allo standard SQL che vuole i nomi di campi/tabelle/etc. non case-sensitive occorrerebbe agire sull'istanza e cambiare il valore anche solo di tale parametro (del quale non mi ricordo il nome, e che spero di non ricordare proprio piu', per non occupare inutilmente la MIA memoria) Pero' non ho capito perche' impostare tutto maiuscolo i nomi dei campi dei vari MySqlParameter sia una soluzione inadeguata. Stai usando qualche automatismo nella composizione delle query?
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
![]() |
![]() |
![]() |
#3 | |||
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
Quote:
Codice:
string query = "update TABELLA set campo1=@campo1 where pk=@PK"; command.Parameters.Add(new MySqlParameter("@campo1", 111)); command.Parameters.Add(new MySqlParameter("@PK", 222)); "Table 'database.tabella' doesn't exist" il fatto che mi segnali il nome della tabella minuscolo e dica che non esiste mi fa pensare che da qualche parte qualcuno stia facendo il tolower della query, tolower che non viene eseguito se non uso i MySqlParameter, visto che l'update liscio funziona. Quote:
|
|||
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
Ciao
![]() Se invece provi a fare: Codice:
string tableName = "tabella"; string query = "update " + tableName.ToUpper() + " set campo1=@campo1 where pk=@PK"; command.Parameters.Add(new MySqlParameter("@campo1", 111)); command.Parameters.Add(new MySqlParameter("@PK", 222)); magari per evitare di dover ogni volta fare questo per le tabelle, potresti fare Codice:
public string getTableName(string tableName) { return tableName.ToUpper(); }
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek ![]() |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Feb 2003
Città: Stockholm (SE)
Messaggi: 1343
|
forse mi sbaglio ma mi ricordo di aver letto che mysql é case sensitive su linux ma non su windows.
onestamente non ci ho mai provato... |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
E' così. E questo perché:
- quei genii che hanno creato Unix hanno realizzato filesystem case sensitive (a uso e consumo delle macchine e... dei programmatori, anziché degli esseri umani); - gli ipergenii di MySQL hanno deciso di mappare le tabelle su filesystem (in appositi file con lo stesso nome). Per cui MySQL si comporta in maniera standard (SQLxyz) su s.o. che hanno filesystem case insensitive (Windows, AmigaOS, ecc.), e non standard su quelli case sensitive (Unix & co). Ovviamente "per coerenza", tutti gli altri tipi di identificatori (nomi dei campi, delle stored procedure, ecc. ecc.) sono... case insensitive, a prescindere dal sensibilità al case del filesystem.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
![]() |
![]() |
![]() |
#7 | ||
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Si lo so, non è il massimo della vita, speravo solo che qualcuno si fosse già imbattuto in questo problema. Non riesco a trovare niente a riguardo in giro.
Ho il sospetto che il problema però possa essere nel MySql.Data, domani faccio una prova in C++ e vedo cosa ottengo. Quote:
![]() Mai provato l'ebbrezza del case sensitive sotto Windows? E' un ottimo modo per nascondere i file, basta cambiare il case e magicamente vedi tutto un altro file, con SVN capita di ritrovarsi con 2 (o più) file diversi fisicamente presenti sul disco ma Windows ovviamente te ne mostra solo 1 dei 2, se però cambi il case appare il file giusto, non ho ancora capito come possa accadere, ma l'ho sperimentato più volte. Quote:
![]() |
||
![]() |
![]() |
![]() |
#8 | |||||
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
Quote:
Quindi puoi realizzare applicazioni / driver che lo implementano case sensitive, ma non mi risulta che sia possibile farlo funzionare in questo modo in Windows. Quote:
Quote:
Quote:
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|||||
![]() |
![]() |
![]() |
#9 | |||||
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
Quote:
Quote:
Quote:
Quote:
Credo che la colpa sia tutta di TortoiseSVN, però mi sono sempre chiesto come ci riesca. |
|||||
![]() |
![]() |
![]() |
#10 | |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
![]()
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Non sono poi del tutto convinto che possa essere definito un bug di Tortoise, non credo proprio utilizzino un driver per andare a scrivere direttamente su NTFS, ergo ci deve essere qualcosa che non va su Windows...
|
![]() |
![]() |
![]() |
#12 | ||||
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
Quote:
Allowed characters in filenames Quote:
Comunque se il codice non è tuo e/o non lo puoi modificare, ti tocca scriverti la query da te. Non credo che ti facciano cambiare il case del filesystem della macchina Linux in cui sta il db. ![]() Quote:
Non vorrei che TortoiseSVN facesse uso di qualche carattere speciale fra quelli user-defined che si possono utilizzare con Unicode, per differenziare i file. NTFS supporta lo Unicode, quindi è possibile. Tra l'altro, a naso, non dovrebbero essere "stampabili" questi caratteri, per cui si spiegherebbe tutto.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
||||
![]() |
![]() |
![]() |
#13 | ||
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
Quote:
|
||
![]() |
![]() |
![]() |
#14 |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Non mi sembrano ci siano differenze e, tra l'altro, non è un problema di Windows, ma di subsystem.
POSIX richiede e accede a NTFS in modalità case sensitive. Tutti gli altri subsystem operano in modalità case insensitive.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
![]() |
![]() |
![]() |
#15 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Per la cronaca: il plurale di genio è geni !!!
![]() |
![]() |
![]() |
![]() |
#16 |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Preferisco continuare col vecchio meccanismo della replicazione delle i. Non mi piace l'uso attuale, che prevede il troncamento della seconda.
gene -> geni; genio -> genii. Io sono abituato così, e davanti a "geni" so già di quale parole è il plurale. Tra l'altro anche parlando, si usa sempre questo meccanismo, perché la tendenza rimane quella di allungare la i, e non di pronunciarla in maniera secca e breve (come dovrebbe essere se si troncasse sempre la seconda i). Certe "riforme" non le accetterò mai: mi sembrano insensate!
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
![]() |
![]() |
![]() |
#17 |
Senior Member
Iscritto dal: Feb 2003
Città: Stockholm (SE)
Messaggi: 1343
|
sarà dovuto alla cadenza napoletano, ma io dico "geni" non "genii"
eg: "quei ragazzi sono dei geni" |
![]() |
![]() |
![]() |
#18 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Anche io lo dico senza doppia "i", quindi diciamo che mi viene naturale
![]() |
![]() |
![]() |
![]() |
#19 |
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
Ciao tomminno.
Se non da codice dell'applicazione, hai modo di controllare come sta settato: Codice:
lower_case_table_names in /etc/mysql/my.cnf ?
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek ![]() |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 14:50.