1

我申请的公司给了我一个小项目。他们想要一个使用 asp.net 的小型应用程序GridViewFormView以及一个ObjectDataSource带有 DataSet (xsd) 文件的应用程序。我一直在做 3 层应用程序,但以不同的方式,我将我的 DataAccess 层作为交流文件,其中包含接受参数和返回数据表等的方法。我的业务层是另一个类,它使用返回业务对象和集合的静态方法DAL 类。现在这ObjectDataSource是我不太喜欢的东西,它生成了一些我什至看不到哪里的代码?

我可以使应用程序工作到某个点(90%)。另外 10% 是我的问题。我需要按名称搜索功能。有两个 ObjectDataSource 1 和 2。ObjectDatasource1只是在第一次加载时从表中获取每条记录。当单击搜索按钮时,我将 gridview 的数据源设置为第二个ObjectDataSource,它有一个调用的方法,该方法GetDataByNameSearch应该接受一个参数(全部由 wizzzardz 定义),参数源是 control(TextBox.Text)。虽然我的FormView工作正常,它从 获取其参数QueryString,但此搜索不返回任何内容。搜索语句如下:

SELECT     Birthday, CreatedAt, ID, Name, Surname
FROM         Users
WHERE     (Name LIKE '%@name%') OR
                      (Surname LIKE '%@name%')

关于如何使用这些 ObjectDataSources 的任何想法,并使生活更轻松(!)

4

1 回答 1

1

没有代码示例很难说,但我确实注意到您对 SQL 参数的使用有点不寻常。

你有:

SELECT Birthday, CreatedAt, ID, Name, Surname 
FROM Users 
WHERE (Name LIKE '%@name%') OR (Surname LIKE '%@name%')

我不确定当 SQL '@' 参数周围有语音标记时它们是否会起作用。我认为上面的示例只会导致在查询中使用文字字符串 '%@name%',这就是您可能没有得到任何结果的原因。

SQL 参数通常这样使用:

SELECT Birthday, CreatedAt, ID, Name, Surname 
FROM Users 
WHERE (Name LIKE @name) OR (Surname LIKE @name)

...但是当然,您将丢失 '%' 通配符。您可以在将它们传递给查询之前将它们直接添加到参数字符串中。如果那是不可能的,也许试试这个版本:

SELECT Birthday, CreatedAt, ID, Name, Surname 
FROM Users 
WHERE (Name LIKE '%' + @name + '%') OR (Surname LIKE '%' + @name + '%')
于 2009-09-20T08:47:52.107 回答