2023年6月21日发(作者:)
Access⾥的变量使⽤与Sql语句⾥变量对应问题/*****************************
*
*Done By dayfrom klete ;
*
********************************/
Sql语句 :
UPDATE tbl_Products SET pName = [@pName], pIntro = [@pIntro], pMarketPrice = [@pMarketPrice], pPreferentialPrice =[@pPreferentialPrice]
WHERE pId=[@pId];
产品更新函数
public bool ProductUpdate(dProduct one)
{
OleDbCommand sqlCmd = new OleDbCommand(); AddParamToSQLCmd(sqlCmd, "@pName", r, 50, , );
AddParamToSQLCmd(sqlCmd, "@pIntro", rWChar, , ,duction);
AddParamToSQLCmd(sqlCmd, "@pMarketPrice", , 8, ,tPrice);
AddParamToSQLCmd(sqlCmd, "@pPreferentialPrice", , 8, , rentialPrice);
AddParamToSQLCmd(sqlCmd, "@pId", r, 0, , ); mandType(sqlCmd,Procedure,SP_PRODUCTS_PRODUCTS_UPDATE);
/*
AddParamToSQLCmd(sqlCmd, "@pId", r, 0, , );
AddParamToSQLCmd(sqlCmd, "@pName", r, 50, , );
AddParamToSQLCmd(sqlCmd, "@pIntro", rWChar, , ,duction);
AddParamToSQLCmd(sqlCmd, "@pMarketPrice", , 8, ,tPrice);
AddParamToSQLCmd(sqlCmd, "@pPreferentialPrice", , 8, , rentialPrice); mandType(sqlCmd,Procedure,SP_PRODUCTS_PRODUCTS_UPDATE);
*/
return (eNonQuery(sqlCmd) == 1 );
}
测试结果
如果更新函数是绿⾊部分,将⽆法对产品进⾏更新,主要原因是
初步认为OleDbParameter[]的参数使⽤顺序与sql语句⾥的参数使⽤顺序必须是对应的,在access⾥⾯。。
但如果是sql2000⾥使⽤(SqlParameter[]),参数顺序则不会有影响。。
附上:AddParamToSQLCmd⽅法,不知是不是这个⽅法有问题
private void AddParamToSQLCmd(OleDbCommand sqlCmd, string paramId, OleDbType sqlType, int paramSize, ParameterDirectionparamDirection, object paramvalue)
{
// Validate Parameter Properties
if (sqlCmd == null)
throw (new ArgumentNullException("sqlCmd"));
if (paramId == )
throw (new ArgumentOutOfRangeException("paramId")); // Add Parameter
OleDbParameter newSqlParam = new OleDbParameter();
terName = paramId;
ype = sqlType; ion = paramDirection; if (paramSize > 0)
= paramSize; if (paramvalue != null)
= paramvalue; (newSqlParam);
}
2023年6月21日发(作者:)
Access⾥的变量使⽤与Sql语句⾥变量对应问题/*****************************
*
*Done By dayfrom klete ;
*
********************************/
Sql语句 :
UPDATE tbl_Products SET pName = [@pName], pIntro = [@pIntro], pMarketPrice = [@pMarketPrice], pPreferentialPrice =[@pPreferentialPrice]
WHERE pId=[@pId];
产品更新函数
public bool ProductUpdate(dProduct one)
{
OleDbCommand sqlCmd = new OleDbCommand(); AddParamToSQLCmd(sqlCmd, "@pName", r, 50, , );
AddParamToSQLCmd(sqlCmd, "@pIntro", rWChar, , ,duction);
AddParamToSQLCmd(sqlCmd, "@pMarketPrice", , 8, ,tPrice);
AddParamToSQLCmd(sqlCmd, "@pPreferentialPrice", , 8, , rentialPrice);
AddParamToSQLCmd(sqlCmd, "@pId", r, 0, , ); mandType(sqlCmd,Procedure,SP_PRODUCTS_PRODUCTS_UPDATE);
/*
AddParamToSQLCmd(sqlCmd, "@pId", r, 0, , );
AddParamToSQLCmd(sqlCmd, "@pName", r, 50, , );
AddParamToSQLCmd(sqlCmd, "@pIntro", rWChar, , ,duction);
AddParamToSQLCmd(sqlCmd, "@pMarketPrice", , 8, ,tPrice);
AddParamToSQLCmd(sqlCmd, "@pPreferentialPrice", , 8, , rentialPrice); mandType(sqlCmd,Procedure,SP_PRODUCTS_PRODUCTS_UPDATE);
*/
return (eNonQuery(sqlCmd) == 1 );
}
测试结果
如果更新函数是绿⾊部分,将⽆法对产品进⾏更新,主要原因是
初步认为OleDbParameter[]的参数使⽤顺序与sql语句⾥的参数使⽤顺序必须是对应的,在access⾥⾯。。
但如果是sql2000⾥使⽤(SqlParameter[]),参数顺序则不会有影响。。
附上:AddParamToSQLCmd⽅法,不知是不是这个⽅法有问题
private void AddParamToSQLCmd(OleDbCommand sqlCmd, string paramId, OleDbType sqlType, int paramSize, ParameterDirectionparamDirection, object paramvalue)
{
// Validate Parameter Properties
if (sqlCmd == null)
throw (new ArgumentNullException("sqlCmd"));
if (paramId == )
throw (new ArgumentOutOfRangeException("paramId")); // Add Parameter
OleDbParameter newSqlParam = new OleDbParameter();
terName = paramId;
ype = sqlType; ion = paramDirection; if (paramSize > 0)
= paramSize; if (paramvalue != null)
= paramvalue; (newSqlParam);
}
发布评论