webForumDet fria alternativet

sqlparametrar

.NET

3 svar · 233 visningar · startad av Nöff

Medlem sedan nov. 2003569 inlägg
Frågan#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?.

Medlem sedan apr. 2004778 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. ;)

Medlem sedan maj 20012 812 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

Medlem sedan maj 20021 466 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.

254 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)