webForumDet fria alternativet

sqlparametrar

3 svar · 231 visningar · startad av Nöff

NöffMedlem sedan nov. 2003569 inlägg
#1
myCommand.Parameters.Add("@customerID",SqlDbType.Int); 
myCommand.Parameters["@customerID"].Value=1; 

myCommand.Parameters.Add("@orderID",SqlDbType.Int); 
myCommand.Parameters["@orderID"].Value=10; 

myCommand.CommandText="INSERT INTO table1 (customerID) VALUES (@customerID)"; 
myCommand.ExecuteNonQuery(); 

myCommand.CommandText="INSERT INTO table2 (orderID) VALUES (@orderID)"; 
myCommand.ExecuteNonQuery();

Hej jag undrar om man kan deklarera alla parametrar man ska använda i de 2 sql satserna först. Och sedan bara ändra värdet i commandtext efterhand när jag gör Execute:sen?, alltså deklarera ALLA parametrar allra först även om jag inte använder ALLA parametrar utan bara 1 i varje SQL sats. Eller måste jag döda hela parameter-collection:en och bygga upp en ny för varje execute?.

Och är det också OK att göra såhär nedan, att bara ändra värdet i parametern och göra en ny execute?.


myCommand.CommandText="INSERT INTO custorders (custID) VALUES (@customerID)"; 

myCommand.Parameters.Add("@customerID",System.Data.SqlDbTypes.Int); 

myCommand.Parameters["@customerID"].Value=1;
myCommand.ExecuteNonQuery(); 

myCommand.Parameters["@customerID"].Value=11; 
myCommand.ExecuteNonQuery();

Bägge dessa funkar finfint, men jag undrar om det kan bli något problem nånstans?.

PDahlenMedlem sedan apr. 2004784 inlägg
#2

1. Du måste "döda" parameterkollektionen inför nästa fråga. Om du deklarerar flera parametrar så skickas de ändå med in i databasen vilket genererar ett fel om din SP inte "behöver" ett visst parameternamn. Prova gärna så ser du om ditt exempel ovan fungerar eller inte.

2. Det som kan orsaka problem i fråga två är att det bara fungerar så länge parametern i din SP heter customerID. Om du sedan försöker anropa en SP där parametern t.ex. heter userID så får du ett fel.
Men som sagt ovan, prova gärna. Jag kan ju ha fel. ;)

GladhMedlem sedan maj 20013 024 inlägg
#3

Eller måste jag döda hela parameter-collection:en och bygga upp en ny för varje execute?.

En O/R Mapper hade löst dina problem eftersom du då hade skapat dina parameter dynamiskt i din kod :) :) :)

- M

Marcus EMedlem sedan maj 20021 294 inlägg
#4

Använder man MySqlCommand (från ByteFX) behöver man inte ta bort de parametrar man inte använder i kommandot. Det är nog olika för olika klasser.

Genererad på 380 ms · cache AV · v20260730165559-full.f96bc7eb