J Josef Medlem sedan mars 2002 3 561 inlägg Trådstart 13 apr. 2004 19:09 #1 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?
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.
J Josef Medlem sedan mars 2002 3 561 inlägg Fungerar utmärkt! Tackar!
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'
J Josef Medlem sedan mars 2002 3 561 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...
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??
J Josef Medlem sedan mars 2002 3 561 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.
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;
}