create procedure test
@icount integer,
@dtmodifytime datetime,
@dcquantity decimal(20,2) output
as
.....
在程序中调用这个存储过程,代码如下
try
{
odbccommand cmd = new odbccommand();
cmd.connection = dbconnection;
cmd.commandtext = "test";
cmd.commandtype = commandtype.storedprocedure;
cmd.parameters.add("@icount",odbctype.int);
cmd.parameters[0].value = 10;
cmd.parameters.add("@dtmodifytime",odbctype.datetime);
cmd.parameters[1].value = convert.todatetime("2005-2-25 00:00:00");
cmd.parameters.add("@dcquantity",odbctype.numeric);
cmd.parameters[2].direction = parameterdirection.output;
cmd.executenonquery();
float num = (float)cmd.parameters["dcquantity"].value;
messagebox.show(num.tostring());
}
catch(odbcexception oe)
{
messagebox.show(oe.message);
}
程序执行到cmd.executenonquery();会抛出异常
error [hy000] [intersolv][odbc sql server driver][sql server]procedure up_shizelastbm expects parameter @icount, which was not supplied.
error [hy000] [intersolv][odbc sql server driver][sql server]procedure up_shizelastbm expects parameter @dtmodifytime, which was not supplied.
error [hy000] [intersolv][odbc sql server driver][sql server]procedure up_shizelastbm expects parameter @dcquantity, which was not supplied.
需要改为:
datetime dt = new datetime(2005,1,10);
odbccommand cmd = new odbccommand();
cmd.connection = dbconnection;
cmd.commandtext = "test ?,?,?";
cmd.commandtype = commandtype.storedprocedure;
cmd.parameters.add("@icount",odbctype.int);
cmd.parameters[0].value = 10;
cmd.parameters.add("@dtmodifytime",odbctype.datetime);
cmd.parameters[1].value = dt;
cmd.parameters.add("@dcquantity",odbctype.double);
cmd.parameters[2].direction = parameterdirection.output;
cmd.executenonquery();
double num = convert.todouble(cmd.parameters[3].value);
messagebox.show(num.tostring());