JosefMedlem sedan mars 20023 123 inlägg
Om jag skapar ett IDbCommand-objekt. Hur ska jag då bära mig åt för att kunna lägga till parametrar till det objektet? Får bara felet:
No overload for method 'Add' takes '2' arguments
om man gör så här:
objCmd.Parameters.Add("@url", tbUrl.Text.ToString());
IDbCommand kan tydligen bara ta en in-parameter (IList). Men hur ska jag då göra? :q
drunken_masterMedlem sedan feb. 200435 inlägg
Du ska lägga till ett objekt som representerar en parameter till ett Commandobjekt, det vill säga en instans av en klass som implementerar IDataParameter. Exempelvis SqlParameter.
IDbCommand command = new SqlCommand("namn", connection);
command.Parameters.Add(new SqlParameter("@test",tbUrl.Text.ToString()));
Den kod du angav antagligen funkat om du hade haft en Dataadapter.
typ
adapter.SelectCommand.Parameters.Add("@parameternamn", värde);
Hoppas detta lilla exempel hjälper.
JosefMedlem sedan mars 20023 123 inlägg
Fungerar utmärkt! Tackar! :bire
Men hur ska jag göra här:
SqlParameter param = objCmd.Parameters.Add(new SqlParameter("@identity", SqlDbType.Int));
param.Direction = ParameterDirection.Output;
Jag får felet:
Cannot implicitly convert type 'int' to 'System.Data.SqlClient.SqlParameter'
JosefMedlem sedan mars 20023 123 inlägg
Man får inget felmeddelande om man skriver så här:
SqlParameter param = new SqlParameter("@identity", SqlDbType.Int);
param.Direction = ParameterDirection.Output;
men då fungerar inte som det ska längre... :l
drunken_masterMedlem sedan feb. 200435 inlägg
Du kanske kan visa lite mer kod? Jag gör ett försök att hjälpa dig utan att riktigt fatta problemet :-)
Nedanstående exempel fungerar. Du kanske kan använda det.
using(SqlConnection conn = new SqlConnection(@""))
{
SqlCommand command = new SqlCommand("testProcedure", conn);
command.CommandType = CommandType.StoredProcedure;
SqlParameter p1 = command.Parameters.Add(new SqlParameter("@fornamn", SqlDbType.VarChar, 255));
p1.Value = "xxxx";
SqlParameter p2 = command.Parameters.Add(new SqlParameter("@identity", SqlDbType.Int, 4));
p2.Direction = ParameterDirection.Output;
conn.Open();
command.ExecuteNonQuery();
int retur = (int)p2.Value; //här tas outputparametern omhand
}
Och proceduren
CREATE PROCEDURE testProcedure
(
@fornamn varchar(50),
@identity int output
)
AS
INSERT INTO testar (fornamn) values (@fornamn)
set @identity = SCOPE_IDENTITY()
Fråga: Har du lagt till parametern till parametersamlingen i ditt commandobjekt i det fallet där du inte fick något felmeddelande??
JosefMedlem sedan mars 20023 123 inlägg
Ska testa detta lite senare ikväll... Tackar!
Jag tror problemet har att göra med att jag använder IDbCommand och inte SqlCommand, men jag är inte säker. Men ska som sagt testa ditt förslag lite senare ikväll.
drunken_masterMedlem sedan feb. 200435 inlägg
Eftersom du använder interfacen kan du göra på detta sätt istället, vilket också funkar...
using(SqlConnection conn = new SqlConnection(@""))
{
IDbCommand command = new SqlCommand("testProcedure", conn);
command.CommandType = CommandType.StoredProcedure;
IDataParameter p1 = new SqlParameter("@fornamn", SqlDbType.VarChar, 255);
p1.Value = "xxxx";
IDataParameter p2 = new SqlParameter("@identity", SqlDbType.Int, 4);
p2.Direction = ParameterDirection.Output;
command.Parameters.Add(p1);
command.Parameters.Add(p2);
conn.Open();
command.ExecuteNonQuery();
int retur = (int)p2.Value;
}
JosefMedlem sedan mars 20023 123 inlägg
Tackar för hjälpen! :bire