今天把一个项目的数据库从sqlserver2008转成SqlServer compact 在执行数据查询时出了问题:
捕捉到 System.Data.SqlServerCe.SqlCeException
HResult=-2147467259
Message=指定的参数值对函数无效。 [ Argument # = 1,Name of function(if known) = isnull ]
Source=SQL Server Compact ADO.NET Data Provider
ErrorCode=-2147467259
NativeError=25922
StackTrace:
在 System.Data.SqlServerCe.SqlCeCommand.ProcessResults(Int32 hr)
在 System.Data.SqlServerCe.SqlCeCommand.CompileQueryPlan()
在 System.Data.SqlServerCe.SqlCeCommand.ExecuteCommand(CommandBehavior behavior, String method, ResultSetOptions options)
在 System.Data.SqlServerCe.SqlCeCommand.ExecuteReader(CommandBehavior behavior)
在 System.Data.SqlServerCe.SqlCeCommand.ExecuteDbDataReader(CommandBehavior behavior)
在 System.Data.Common.DbCommand.ExecuteReader()
…………………………
HResult=-2147467259
Message=指定的参数值对函数无效。 [ Argument # = 1,Name of function(if known) = isnull ]
Source=SQL Server Compact ADO.NET Data Provider
ErrorCode=-2147467259
NativeError=25922
StackTrace:
在 System.Data.SqlServerCe.SqlCeCommand.ProcessResults(Int32 hr)
在 System.Data.SqlServerCe.SqlCeCommand.CompileQueryPlan()
在 System.Data.SqlServerCe.SqlCeCommand.ExecuteCommand(CommandBehavior behavior, String method, ResultSetOptions options)
在 System.Data.SqlServerCe.SqlCeCommand.ExecuteReader(CommandBehavior behavior)
在 System.Data.SqlServerCe.SqlCeCommand.ExecuteDbDataReader(CommandBehavior behavior)
在 System.Data.Common.DbCommand.ExecuteReader()
google一下发现很多人遇到这问题。
解决的方法如下:把sql语句中 f.Bar = @bar OR @bar IS NULL 改成@bar OR cast(@bar AS varchar(4000)) IS NULL
原文地址