编写了一个数据库层组件,使用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});

}

...全文
312 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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});

这个方法里面语句是否正确

62,243

社区成员

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

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

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

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