3

列が特定のパラメーターに一致するテーブルから選択したい。パラメータが null の場合、テーブルからすべてのレコードを選択したい。以下の関連コードは、このエラーをスローするものです。

    private static string _dbJobCreate = 
"CREATE TABLE Job (jID int primary key identity(1,1), jAddress nvarchar(64) not null);";

    private static string _dbJobSelect = 
"SELECT jID FROM Job WHERE jAddress = @jAddress OR @jAddress IS NULL";

    public static DataTable GetJobs(string jAddress)
    {
        SqlCeParameter pjAddress = new SqlCeParameter();
        pjAddress.ParameterName = "@jAddress";

        if (!string.IsNullOrEmpty(jAddress))
        {
            pjAddress.Value = jAddress;
        }
        else
        {
            pjAddress.Value = DBNull.Value;
        }

        return ExecuteDataTable(_dbJobSelect, pjAddress);
    }

例外:The specified argument value for the function is not valid. [ Argument # = 1,Name of function(if known) = isnull ]

SQLCEでエラーなしでこれを効率的に達成するにはどうすればよいですか?

4

4 に答える 4

2

クエリに渡されるパラメータのタイプを指定することで、このエラーを回避できます。したがって、必要なことは次のとおりです。

pjAddress.DbType = DbType.String;
于 2013-11-20T15:51:39.693 に答える
1

私の解決策は、データベースからすべての行を選択し、パラメーターが渡された場合は .NET で行をフィルター処理することです。実際のデータベースに移動すると思いますが、多数のジョブがある場合、これは面倒になる可能性があります。それが起こった場合。

private static string _dbJobSelect = "SELECT jID, jAddress FROM Job";

public static DataTable GetJobs(string jAddress)
{
    DataTable dt = ExecuteDataTable(_dbJobSelect);

    if (!string.IsNullOrEmpty(jAddress))
    {
        DataView dv = dt.DefaultView;
        dv.RowFilter = string.Format("jAddress = '{0}'", jAddress);
        dt = dv.ToTable();
    }

    return dt;
}
于 2012-12-30T11:30:00.423 に答える