0

我正在使用带有 ac# 后端的 asp.net 创建一个具有主视图和详细视图的工作网站。为了提取数据,我使用的是实体框架,该框架首先从 SQL Server 2005 实例逆向工程代码,该实例运行在我正在开发的同一 xp 机器上。我希望网站上的详细视图能够查看和编辑在主视图中选择的现有记录,而且还能够插入记录。
到目前为止,我已经到了可以使用详细视图来查看和插入记录的地步,但编辑到目前为止还没有成功。我在更新时没有收到错误,而且我看不到任何地方都反映了任何变化。
我见过的一些解决方案说您必须定义 DataKeyNames。(在我的例子中,我使用了一个字段:Job_UID,这实际上是我连接详细视图和主视图的方式。)我试图通过将 where 子句中的项目数减少到只需反映我的 PK 并通过在查询设计器中测试查询。这是我的查询:


SelectCommand ="SELECT Job_Details.Job_UID、Job_Details.Job_Title、Job_Details.Job_Store_ID、Job_Details.Job_Type_Id、Job_Details.Job_Description、Job_Details.Job_Responsibilities、Job_Details.Job_Pay、Job_Details.Job_Supervisor、Job_Details.Job_Start_Date、Job_Details.Job_Details.Job_End_Date、Job_Details.Job_Details. Job_Meta_Post_EndDate, Job_Details.Job_Meta_Keywords, Store_Look_Up.Store_Name, Store_Look_Up.Store_Region, Store_Look_Up.Store_Address, Job_Type.Job_Type_Name, Job_Type.Job_Type_Description FROM Job_Details INNER JOIN Job_Type ON Job_Details.Job_Type_Id = Job_Type.Job_Type_Id INNER JOIN Store_Look_Up ON Job_Details.Job_Store_ID = Store_Look_Up.Store_Id WHERE (Job_Details.Job_UID = @Job_UID)"
InsertCommand="插入 Job_Details(Job_UID、Job_Title、Job_Store_ID、Job_Type_Id、Job_Description、Job_Responsibilities、Job_Pay、Job_Supervisor、Job_Start_Date、Job_End_Date、Job_Meta_Post_StartDate、Job_Meta_Post_EndDate、Job_Meta_Keywords)值(@Job_UID、@Job_Description、@Job_Id、@Job_Store_ID、 Job_Responsibilities、@Job_Pay、@Job_Supervisor、@Job_Start_Date、@Job_End_Date、@Job_Meta_Post_StartDate、@Job_Meta_Post_EndDate、@Job_Meta_Keywords)"
UpdateCommand="更新 Job_Details SET Job_Title = @Job_Title, Job_Store_ID = @Job_Store_ID, Job_Type_Id = @Job_Type_Id, Job_Description = @Job_Description, Job_Responsibilities = @Job_Responsibilities, Job_Pay = @Job_Pay, Job_Supervisor = @Job_Supervisor, Job_Start_Date = @Job_Start_Date, Job_End_Date = Job_Meta_Post_StartDate = @Job_Meta_Post_StartDate,Job_Meta_Post_EndDate = @Job_Meta_Post_EndDate,Job_Meta_Keywords = @Job_Meta_Keywords WHERE (Job_UID = @Original__Job_UID)">

我见过的其他解决方案似乎涉及很多自定义编码。难道不应该有办法只使用 Visual Studio 的代码生成器并进行一些编码调整吗?

任何帮助将不胜感激,并在此先感谢!

4

1 回答 1

0

问题出在我的更新命令上:

我使用 FormView 的 ItemUpdatedEvent 来确定修改了多少行:在我的情况下为 0。

        string textToDisplay = string.Empty;
        textToDisplay += "AffectedRows: " + e.AffectedRows.ToString() + "|";

        Label1.Text = textToDisplay;

一旦我能够清楚地看到有多少行正在更新,我就开始测试查询。我用PK替换了@Original_Job_UID。它在页面上起作用。然后我查看了一些 MSDN 文档,发现过滤器应该是 @Job_UID。我输入了它,它起作用了!

希望这对你有帮助!

于 2013-02-08T18:14:20.067 回答