webForumDet fria alternativet

IDbCommand-parametrar?

7 svar · 332 visningar · startad av Josef

JosefMedlem sedan mars 20023 123 inlägg
#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? :q

drunken_masterMedlem sedan feb. 200435 inlägg
#2

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
#3

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
#4

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
#5

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
#6

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
#7

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
#8

Tackar för hjälpen! :bire

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