【问题标题】:SQL queries trouble asp.net web pages [closed]SQL查询麻烦asp.net网页[关闭]
【发布时间】:2016-03-11 20:12:04
【问题描述】:

所以我在 webmatrix 中制作了一个简单的 asp.net 网页应用程序,但我遇到了 SQL 问题。我正在处理一项任务,我们使用 microsoft asp.net 网页教程作为指导 (http://www.asp.net/web-pages/overview/getting-started/introducing-aspnet-web-pages-2/getting-started)。但是当尝试运行查询来更新数据库时,它总是失败。

我得到的错误如下:

System.FormatException: 0
第 26 行:var db = Database.Open("StarterSite");
第 27 行:var deleteCommand = "DELETE FROM Gift WHERE ID = @0";
第 28 行:db.Execute(deleteCommand, Id); 第 29 行:Response.Redirect("~/ShowDbTest");
第 30 行:}

它告诉我参数的顺序是错误的,就像它会是一个重载错误。

但我不知道哪里出了问题,所以如果有人能告诉我我犯了什么错误,那就太好了。

@{
Layout = "~/_SiteLayout.cshtml";
var gift = "";
var likeability = "";
var Id = "";

if(!IsPost){
    if(!Request.QueryString["id"].IsEmpty() && Request.QueryString["id"].IsInt()){
        Id = Request.QueryString["id"];
        var db = Database.Open("StarterSite");
        var dbCommand = "SELECT * FROM Gift WHERE ID = @0";
        var row = db.QuerySingle(dbCommand, Id);

        if(row != null) {
            gift = row.Gift;
            likeability = row.Likeability;
        }
        else{
            Validation.AddFormError("No Gift was selected.1");
        }
    }
    else{
        Validation.AddFormError("No Gift was selected.2");
    }
}

if(IsPost){
    Validation.RequireField("gift", "You must enter a gift");
    Validation.RequireField("likeability", "Genre is required");
    Validation.RequireField("id", "No ID was submitted!");

    gift = Request.Form["gift"];
    likeability = Request.Form["likeability"];
    Id = Request.Form["Id"];

    if(Validation.IsValid()){
        var db = Database.Open("StarterSite");
        var updateCommand = "UPDATE Gift SET Gift=@0, Likeability=@1 WHERE ID=@2";
        db.Execute(updateCommand, gift, likeability, Id);
        Response.Redirect("~/showDbTest");
    }
 }
}

【问题讨论】:

  • 您是否每次在Request.QueryString["id"] 中检查您获得的价值?

标签: c# sql asp.net sql-server asp.net-webpages


【解决方案1】:

C# 区分大小写。

试试这个:Id = Request.Form["id"];

也可以使用:if(!Request.QueryString["id"].IsEmpty() && Request.QueryString["id"].IsInt())

另外,不要忘记关闭连接。您正在进行重定向,连接将保持打开状态。使用 USING

【讨论】:

  • c# 可能区分大小写,但 NameValueCollection 中的键不区分大小写,除非明确指定为区分大小写。
  • 是的。让我们看看 WJZ 的反应。
  • 非常感谢。请求表单有点问题,但我没有在隐藏的 html 字段中使用值(你看不到,因为我认为你不需要我的 html 代码)。但是感谢有关关闭数据库的提示,因为我完全忘了关闭它。
  • @CristiRoman 所以这有点奇怪,request.querystring 有点问题,这解决了它。但是在不同的页面上,几乎完全相同的代码崩溃了。唯一的区别是我正在编辑而不是删除,但它再次失败。如果您不介意再看一下,我会更新代码。
【解决方案2】:

您将 ID 声明为字符串,并且数据库(希望)定义为整数,这很可能会导致转换问题。

将您的“Id”转换为数据库中定义的类型并将其传入。

var Id= Convert.ToInt32(Request.QueryString["id"]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多