编写了一个数据库层组件,使用Nunit测试完成,在Web页中使用却无效

daou101 2004-11-01 09:43:04
各位高手,今日遇到一个极端令我困惑的问题.
数据库操作层疑问:
我写了一个数据库访问层,比如ItemsDB就代表了所有Items表的操作,在Web页中,调用数据库中的存储过程实现相应功能.使用NUnit测试了组件的所有函数,均可以正确执行.
但是在Web页中:删除,添加功能都没有问题,更新却不起任何作用,程序不报错.
有谁遇到过类似的奇怪问题,探讨探讨啊.

//例如,页面有个"更新"按钮,单击后执行:

private void ButtonUpdate_Click(object sender, System.EventArgs e)
{
OA.Component.ItemsDB itemsDB=new OA.Component.ItemsDB();
itemsDB.UpdateItem(itemID,TextBoxItemName.Text,TextBoxItemUOM.Text,
Convert.ToDouble(TextBoxUP.Text));

Response.Redirect(ViewState["UrlReferrer"].ToString());

}

//ItemsDB可能象这样, 使用 GotDotNet.ApplicationBlocks


public void UpdateItem(string itemID,string itemName,string uom,double unitPrice)
{

helper.ExecuteNonQuery(connectionString,"dbo.Items_UpdateItem",new object[]{itemID, itemName, uom, unitPrice});

}

...全文
387 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
jinglelin 2004-11-02
  • 打赏
  • 举报
回复
单步调试一下,如果只是更新不行的话,检查你的更新时间有没有被调用,丢失事件的情况经常出现的.
this.btn_Update.Click += new System.EventHandler(this.btn_Update_Click);
daou101 2004-11-02
  • 打赏
  • 举报
回复
多谢各位老大了.
我跟踪了一下,原来是ItemID没有传值进去的缘故.我再隐藏代码页,申明了一个私有的string itemID;
加载页面时他的值从查询字符串中获得.

但是,当单击页面上的更新按钮时,这个itemID已经不再存在了,为什么我真还不清楚,我只好吧itemID
存在Session中,这样就可以实现更新了.

happyjun2000 2004-11-02
  • 打赏
  • 举报
回复
原来老大们都在这里^_^
goody9807 2004-11-02
  • 打赏
  • 举报
回复
编写 NUnit 测试
作为示例,我将测试 .NET 框架中 Hashtable 类的功能,以确定是否可以添加两个对象并且随后检索这些对象。我的第一步是添加对 NUnit.Framework 程序集的引用,该程序集将赋予我对 NUnit 框架的属性和方法的访问权。接下来,我将创建一个类并用 TestFixture 属性标记它。该属性使 NUnit 可以知道该类包含 NUnit 测试:

using System;
using System.Collections;
using NUnit.Framework;

namespace NUnitExample
{
[TestFixture]
public class HashtableTest {
public HashtableTest() {

}
}
}

下一步,我将创建一个方法并用 [Test] 属性标记它,以便 NUnit 知道该方法是一个测试。然后,我将建立一个 Hashtable 并向其添加两个值,再使用 Assert.AreEqual 方法查看我是否可以检索到与我添加到 Hashtable 的值相同的值,如下面的代码所示:

[Test]
public void HashtableAddTest()
{
Hashtable ht = new Hashtable();

ht.Add("Key1", "Value1");
ht.Add("Key2", "Value2");

Assert.AreEqual("Value1", ht["Key1"], "Wrong object returned!");
Assert.AreEqual("Value2", ht["Key2"], "Wrong object returned!");
}

这将确认我可以首先向 Hashtable 中添加值并随后检索相应的值 — 这是一个很简单的测试,但能够表现 NUnit 的功能。存在许多测试类型以及各种 Assert 方法,可使用它们来测试代码的每个部分。

要运行该测试,我需要生成项目,在 NUnit 应用程序中打开生成的程序集,然后单击 Run 按钮。图 5 显示了结果。当我看到那个大的绿色条纹时,我有一种兴奋和头晕的感觉,因为它让我知道测试已经通过了。这个简单的示例表明 NUnit 和单元测试是多么方便和强大。由于能够编写可以保存的单元测试,并且每当您更改代码时都可以重新运行该单元测试,您不仅可以更容易地检测到代码中的缺陷,而且最终能够交付更好的应用程序。



图 5 NUnit

NUnit 是一个开放源代码项目,并且可以从 http://www.nunit.org 下载。还有一个优秀的 NUnit Visual Studio .NET 外接程序,它使您可以直接从 Visual Studio 中运行单元测试。您可以在 http://sourceforge.net/projects/nunitaddin 找到它。有关 NUnit 及其在测试驱动开发中的地位的详细信息,请参阅文章“Test-Driven C#: Improve the Design and Flexibility of Your Project with Extreme Programming Techniques”(MSDN ®Magazine 2004 年 4 月刊)。

xueqs 2004-11-02
  • 打赏
  • 举报
回复
凑凑热闹
marvelstack 2004-11-02
  • 打赏
  • 举报
回复
检查一下存储过程是否正常,先在查询分析器中执行更新一条记录是否能成功。
ianok 2004-11-02
  • 打赏
  • 举报
回复
顶!
saucer 2004-11-02
  • 打赏
  • 举报
回复
check the return value,

int n = helper.ExecuteNonQuery(connectionString,"dbo.Items_UpdateItem",new object[]{itemID, itemName, uom, unitPrice});

if (n==0)
{
//你输入的数据并没有产生相应的变化,因为WHERE部分不满足条件
}
lhcoolhacker 2004-11-02
  • 打赏
  • 举报
回复
如果要实现在回发时仍能获取值,请将string itemID放在ViewState中即可
孟子E章 2004-11-02
  • 打赏
  • 举报
回复
你的隐藏页怎么写的?如果不是标准控件的话,要自己处理状态维护的问题
Seeko0 2004-11-02
  • 打赏
  • 举报
回复
SqlServer中使用探查器察看sql语句
或自己写code输出sql语句进行检查
cancersyf 2004-11-01
  • 打赏
  • 举报
回复
看你的程序根本看不出问题在哪儿,好好检查helper.ExecuteNonQuery方法和调用的存储过程。首先确定你的存储过程没有问题,然后再检查ExecuteNonQuery方法,最好跟踪调试一下,实在不行把代码贴出来吧。
孟子E章 2004-11-01
  • 打赏
  • 举报
回复
检查
helper.ExecuteNonQuery(connectionString,"dbo.Items_UpdateItem",new object[]{itemID, itemName, uom, unitPrice});

这个方法里面语句是否正确
内容概要:本文研究了基于Q-Learning自适应强化学习的PID控制器在自主水下航行器(AUV)运动控制的应用,旨在提升其在复杂海洋环境下的控制性能。通过建立AUV的动力学模型,将Q-Learning算法与传统PID控制相结合,实现控制器参数的在线自适应优化,有效增强了系统的响应速度、稳定性和抗干扰能力。研究采用Matlab进行仿真验证,结果表明该方法在轨迹跟踪与姿态控制方面具有优越表现,为水下机器人智能控制提供了可行的技术路径与理论支持。; 适合人群:具备自动控制理论、强化学习或水下机器人建模背景,从事相关科研工作的研究人员、高校研究生及工程技术开发者。; 使用场景及目标:①应用于高精度、强鲁棒性的水下机器人运动控制系统设计;②开展智能PID控制器在非线性、时变系统的参数自整定研究;③作为强化学习在复杂工业控制场景落地的典型案例参考,推动算法与工程实践融合。; 阅读建议:建议结合提供的Matlab代码进行仿真实验,重点剖析Q-Learning与PID融合的架构设计、奖励函数设定及参数收敛过程,可进一步拓展至与其他智能优化算法(如DQN、Actor-Critic)的对比研究,深化对自适应控制机制的理解。
已经博主授权,源码转载自 https://pan.quark.cn/s/a4b39357ea24 Matlab 被视为一种功能卓越的编程平台,特别是在数值运算和数据分析方面展现出广泛的应用价值。在应对多元非线性回归的挑战时,Matlab 拥备多种工具和函数,支持用户对复杂的数据进行构建模型和适配。本指南将重点阐释在 Matlab 环境下如何执行多元非线性回归分析。 我们需要掌握三种关键的回归指令: 1. `polyfit(x,y,n)`:此函数适用于拟合一元幂函数,能够导出一个多项式模型。例如,若知晓数据呈现二次函数形态,可选择`n=2`来适配一个二次曲线。 2. `regress(y,x)`:这是一个多元线性回归指令,能够处理多个自变量对因变量的影响。即便数据并非完全呈现线性特征,该函数也能提供一个线性近似。 3. `nlinfit(x,y,’fun’,beta0)`:这是最为通用的非线性回归指令,适用于适配任何类型的函数,无论是一元或多元,前提是用户能够定义函数形式(`fun`参数)。 回归分析的核心在于寻找一组最优的系数,使得模型能够最恰当地描述数据。这通常涉及选择一个合适的函数形态,随后通过最小化误差平方和来估算系数。在Matlab,`regress`指令主要用于处理线性模型,而`nlinfit`则处理更为复杂的非线性模型。 对于多元线性回归模型,我们可以用如下形式进行表述: \[ y = \beta_0 + \beta_1x_1 + \beta_2x_2 + \cdots + \beta_px_p + \epsilon \] 其,\( y \)是因变量,\( x_1, x_2, \ldots, x_p \)是自变量,\( \beta_0, \beta_1, ...

62,272

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧