0

我有一个名为 Product 的表(ProductCode 字段数据类型为 varchar ):

ID     ProductName    ProductCode
1       aaa              0001
2       bbb              0002
3       ccc              0004
4       ddd              0006
5       eee              0007
6       fff              0008

我的问题是:如果当前 ProductCode 字段值为 '0006'。我想生成一个值为 '0009' 的值。

public string GenerateNumber(string codeNumber)
{

    StringBuilder strSql = new StringBuilder();
    strSql.Append("select count(1) from Product");
    strSql.Append(" where ProductCode=@codeNumber");
    SqlParameter[] parameters = {
        new SqlParameter("@codeNumber", SqlDbType.NChar,8)
    };
    parameters[0].Value = codeNumber;
    bool existInDatabase = SQLHelper.Exists(strSql.ToString(), parameters);
    if (existInDatabase)
    {
        this.GenerateNumber((Convert.ToInt32(codeNumber) + 1).ToString().PadLeft(4, '0'));
    }
    return (Convert.ToInt32(codeNumber) + 1).ToString().PadLeft(4, '0');
}

调用这个函数,比如:GenerateNumber("0006")

结果应该返回0009,但不是!

谁能帮帮我?谢谢,我是新手!

4

1 回答 1

0

为此在 asp.net 中使用递归似乎开销太大。

您可以通过向 GenerateNextProductCode 编写一个使用公用表表达式生成此值的存储过程来做到这一点。

此代码失败的原因是您没有返回递归结果。

像这样更正它:

public string GenerateNumber(string codeNumber)
{

        StringBuilder strSql = new StringBuilder();
        strSql.Append("select count(1) from Product");
        strSql.Append(" where ProductCode=@codeNumber");
        SqlParameter[] parameters = {
                new SqlParameter("@codeNumber", SqlDbType.NChar,8)
        };
        parameters[0].Value = codeNumber;
        bool existInDatabase = SQLHelper.Exists(strSql.ToString(), parameters);
        if (existInDatabase)
        {
           return this.GenerateNumber((Convert.ToInt32(codeNumber) + 1).ToString().PadLeft(4, '0'));
        }
        return (Convert.ToInt32(codeNumber) + 1).ToString().PadLeft(4, '0');
}
于 2012-09-11T05:16:16.823 回答