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);

}