当前位置: 首页 > 知识库问答 >
问题:

ASP.NET C#SQL提交错误

贝德辉
2023-03-14

我收到以下错误时,张贴我的表格。

参数化查询需要一个未提供的参数值。参数名称:0描述:在执行当前web请求期间发生未处理的异常。请查看堆栈跟踪以获得有关错误及其在代码中起源的详细信息。

异常详细信息:System.ArgumentNullException:参数化查询需要一个未提供的参数值。参数名称:0

源错误:

第70行:var dbSave=database.open(“QualityMonitoring”);第71行:var insertCommand=“插入分数(代理,Q1、Q2、Q3、Q4、Q5、Q7、Q8、Q9、Q10、Q11、Q12、Q14、Q16、Q17、Q18、Q19、Q20,注释)值(@0、@1、@2、@3、@4、@5、@7、@8、@9、@10、@11、@12、@13、@15、@17、@19、@20、@21)”;第72行:dbsave.execute(insertCommand,Agent,Q1,Q2,Q3,Q4,Q5,Q6,Q7,Q8,Q9,Q10,Q11,Q12,Q13,Q14,Q15,Q16,Q17,Q18,Q19,Q20,注释);第73行:response.redirect(“~/bureauform”);第74行:}

[ArgumentNullException:参数化查询需要一个未提供的参数值。参数名称:0]
System.data.sqlserverce.sqlceCommands.FillParameterDataBindings(Boolean verifyValue)+1415
System.data.sqlServerce.sqlceCommand.command(CommandBehavior,String method,ResultSetOptions options)+569
System.data.sqlceCommand.executeNonQuery()+21 David\Documents\My Web站点\emptysite\bureauform.cshtml:72
system.Web.webpages.webpages.executePageHierarchy()+197
system.Web.webpages.webpage.executePageHierarchy(Ienumerable`1个executors)+69system.Web.webpages.webpage.executePageHierarchy()+151

请看下面我的代码和标记。

@{

// SELECT AGENT

var db = Database.Open("QualityMonitoring") ;
var listAgent = "SELECT Agent FROM Data";

List<SelectListItem> agentdropdownlistdata = new List<SelectListItem>();
bool isSelected = false;
agentdropdownlistdata.Add(new SelectListItem {Text = "Please Choose...",Value = "0", Selected = true });
foreach(var item in db.Query(listAgent)){   
    agentdropdownlistdata.Add(new SelectListItem
    {
        Text = item.Agent,
        // Value = item.ID.ToString(), 
        Selected = isSelected
    });
}

// SAVE FORM

var Agent = "";
var Q1 = "";
var Q2 = "";
var Q3 = "";
var Q4 = "";
var Q5 = "";
var Q6 = "";
var Q7 = "";
var Q8 = "";
var Q9 = "";
var Q10 = "";
var Q11 = "";
var Q12 = "";
var Q13 = "";
var Q14 = "";
var Q15 = "";
var Q16 = "";
var Q17 = "";
var Q18 = "";
var Q19 = "";
var Q20 = "";
var Notes = "";

    if(IsPost){

    Agent = Request.Form["Agent"];
    Q1 = Request.Form["Q1"];
    Q2 = Request.Form["Q2"];
    Q3 = Request.Form["Q3"];
    Q4 = Request.Form["Q4"];
    Q5 = Request.Form["Q5"];
    Q6 = Request.Form["Q6"];
    Q7 = Request.Form["Q7"];
    Q8 = Request.Form["Q8"];
    Q9 = Request.Form["Q9"];
    Q10 = Request.Form["Q10"];
    Q11 = Request.Form["Q11"];
    Q12 = Request.Form["Q12"];
    Q13 = Request.Form["Q13"];
    Q14 = Request.Form["Q14"];
    Q15 = Request.Form["Q15"];
    Q16 = Request.Form["Q16"];
    Q17 = Request.Form["Q17"];
    Q18 = Request.Form["Q18"];
    Q19 = Request.Form["Q19"];
    Q20 = Request.Form["Q20"];
    Notes = Request.Form["Notes"];

    var dbSave = Database.Open("QualityMonitoring");
    var insertCommand = "INSERT INTO Scores (Agent, Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8, Q9, Q10, Q11, Q12, Q13, Q14, Q15, Q16, Q17, Q18, Q19, Q20, Notes) VALUES(@0, @1, @2, @3, @4, @5, @6, @7, @8, @9, @10, @11, @12, @13, @14, @15, @16, @17, @18, @19, @20, @21)";
    dbSave.Execute(insertCommand, Agent, Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8, Q9, Q10, Q11, Q12, Q13, Q14, Q15, Q16, Q17, Q18, Q19, Q20, Notes);
    Response.Redirect("~/BureauForm");
}
}

<html>
<body>

<h2>Bureau Quality Monitoring</h2>

<form method="get">
<div>
<fieldset>
   Select Agent: @Html.DropDownList("Agent", agentdropdownlistdata)
</fieldset>
</div>
</form>

<br/>

<form method="post">
<div>
<fieldset>
<legend>Subject</legend>
    <label for="Q1">Question 1</label>
    Yes<input type="radio" name="Q1" value="Yes">
    No<input type="radio" name="Q1" value="No">
    N/A<input type="radio" name="Q1" value="N/A">
</fieldset>
</div>

<br/>

<div>
<fieldset>
<legend>Subject</legend>
    <label for="Q2">Question 2</label>
    Yes<input type="radio" name="Q2" value="Yes">
    No<input type="radio" name="Q2" value="No">
    N/A<input type="radio" name="Q2" value="N/A">
    <br/>
    <label for="Q3">Question 3</label>
    Yes<input type="radio" name="Q3" value="Yes">
    No<input type="radio" name="Q3" value="No">
    N/A<input type="radio" name="Q3" value="N/A">
    <br/>
    <label for="Q4">Question 4</label>
    Yes<input type="radio" name="Q4" value="Yes">
    No<input type="radio" name="Q4" value="No">
    N/A<input type="radio" name="Q4" value="N/A">
</fieldset>
</div>

<br/>

<div>
<fieldset>
<legend>Subject</legend>
    <label for="Q5">Question 5</label>
    Yes<input type="radio" name="Q5" value="Yes">
    No<input type="radio" name="Q5" value="No">
    N/A<input type="radio" name="Q5" value="N/A">
    <br/>
    <label for="Q6">Question 6</label>
    Yes<input type="radio" name="Q6" value="Yes">
    No<input type="radio" name="Q6" value="No">
    N/A<input type="radio" name="Q6" value="N/A">
    <br/>
    <label for="Q7">Question 7</label>
    Yes<input type="radio" name="Q7" value="Yes">
    No<input type="radio" name="Q7" value="No">
    N/A<input type="radio" name="Q7" value="N/A">
</fieldset>
</div>

<br/>

<div>
<fieldset>
<legend>Subject</legend>
    <label for="Q8">Question 8</label>
    Yes<input type="radio" name="Q8" value="Yes">
    No<input type="radio" name="Q8" value="No">
    N/A<input type="radio" name="Q8" value="N/A">
</fieldset>
</div>

<br/>

<div>
<fieldset>
<legend>Subject</legend>
    <label for="Q9">Question 9</label>
    Yes<input type="radio" name="Q9" value="Yes">
    No<input type="radio" name="Q9" value="No">
    N/A<input type="radio" name="Q9" value="N/A">
    <br/>
    <label for="Q10">Question 10</label>
    Yes<input type="radio" name="Q10" value="Yes">
    No<input type="radio" name="Q10" value="No">
    N/A<input type="radio" name="Q10" value="N/A">
</fieldset>
</div>

<br/>

<div>
<fieldset>
<legend>Subject</legend>
    <label for="Q11">Question 11</label>
    Yes<input type="radio" name="Q11" value="Yes">
    No<input type="radio" name="Q11" value="No">
    N/A<input type="radio" name="Q11" value="N/A">
    <br/>
    <label for="Q12">Question 12</label>
    Yes<input type="radio" name="Q12" value="Yes">
    No<input type="radio" name="Q12" value="No">
    N/A<input type="radio" name="Q12" value="N/A">
</fieldset>
</div>

<br/>

<div>
<fieldset>
<legend>Subject/legend>
    <label for="Q13"> Question 13</label>
    Yes<input type="radio" name="Q13" value="Yes">
    No<input type="radio" name="Q13" value="No">
    N/A<input type="radio" name="Q13" value="N/A">
</fieldset>
</div>

<br/>

<div>
<fieldset>
<legend>Subject</legend>
    <label for="Q14">Question 14</label>
    Yes<input type="radio" name="Q14" value="Yes">
    No<input type="radio" name="Q14" value="No">
    N/A<input type="radio" name="Q14" value="N/A">
    <br/>
    <label for="Q15">Question 15</label>
    Yes<input type="radio" name="Q15" value="Yes">
    No<input type="radio" name="Q15" value="No">
    N/A<input type="radio" name="Q15" value="N/A">
    <br/>
    <label for="Q16">Question 16</label>
    Yes<input type="radio" name="Q16" value="Yes">
    No<input type="radio" name="Q16" value="No">
    N/A<input type="radio" name="Q16" value="N/A">
    <br/>
    <label for="Q17">Question 17</label>
    Yes<input type="radio" name="Q17" value="Yes">
    No<input type="radio" name="Q17" value="No">
    N/A<input type="radio" name="Q17" value="N/A">
    <br/>
    <label for="Q18">Question 18</label>
    Yes<input type="radio" name="Q18" value="Yes">
    No<input type="radio" name="Q18" value="No">
    N/A<input type="radio" name="Q18" value="N/A">
    <br/>
    <label for="Q19">Question 19</label>
    Yes<input type="radio" name="Q19" value="Yes">
    No<input type="radio" name="Q19" value="No">
    N/A<input type="radio" name="Q19" value="N/A">
    <br/>
    <label for="Q20">Question 20</label>
    Yes<input type="radio" name="Q20" value="Yes">
    No<input type="radio" name="Q20" value="No">
    N/A<input type="radio" name="Q20" value="N/A">
</fieldset>
</div>

<br/>

<div>
<fieldset>
<legend>Notes</legend>
    <textarea name="Notes" rows="10" cols="50"></textarea>
    <br/>
    <input type="submit" name="saveMonitoring" value="Save Monitoring" />
</fieldset>
</div>

<br/>
</form>
</body>
</html>

我有一种感觉,来自单选按钮的值没有被分配给变量,因此没有什么要提交的,但是如果其他人能帮助它,将非常感谢。

共有1个答案

丁韬
2023-03-14

问题是,当您将值为空的参数传递给SQLParameterCollection.add方法时,它并不认为您的意思是DBNull.value,它只是不添加参数。由于每个单选按钮或下拉列表都没有默认值,我认为当没有选择任何内容时,您将获得一个空值,因此如果代理dropdownlist没有选择任何内容,request.form[“agent”]将为null。因此在这一行:

Agent = Request.Form["Agent"];

您正在将变量agent设置为NULL。类似这样的方法可以解决这个问题:

object Agent = DBNull.Value;
if (Request.Form["Agent"] != null) 
{
    Agent = Request.Form["Agent"];
}

但是,对于一个非常频繁的问题,这可能会变得非常麻烦和冗长,因此,我通常为SQLParameterCollection.AddWithValue方法提供一个扩展。下面是code project中这种扩展的一个示例

public static SqlParameter AddWithValue(this SqlParameterCollection target, string parameterName, object value, object nullValue) 
{
    if (value == null) 
    {
        return target.AddWithValue(parameterName, nullValue ?? DBNull.Value);
    }
    return target.AddWithValue(parameterName, value);
}

编辑

我现在看到问题了。代理下拉列表包含在get表单中,其余的单选框位于post表单中:

<form method="get">
    <div>
        <fieldset>
           Select Agent: @Html.DropDownList("Agent", agentdropdownlistdata)
        </fieldset>
    </div>
</form>
<br/>
<form method="post">
    ... All other controls
</from>
if(IsPost){
    Agent = Request.Form["Agent"];

request.form[“agent”]为空,因为它不包含在post表单中。将下拉列表移动到与其余控件相同的窗体中。

 类似资料:
  • 我正在尝试编写一个具有事务和try/catch块的MS sql脚本。如果它捕获异常,则回滚事务。如果没有,则提交事务。我见过几个不同的网站说这样做: 但是,即使在捕获异常的情况下,我们也不会仍然命中“提交事务”行吗?这不会导致 SQL 错误,因为事务已经回滚吗?我认为应该这样做: 为什么通常发布的解决方案不包括@成功变量?提交已经回滚的事务时没有发生sql错误吗?我说第一个代码示例的“提交事务”行

  • 需知 当你觉得发现了一个Swoole内核的bug时,请提出报告。 Swoole的内核开发者们或许还不知道问题的存在, 除非你主动提出报告,否则BUG也许将很难被发现并修复, 你可以在 Github的issue区 提出错误报告(即点击右上角绿色的New issue按钮),这里的错误报告将会被最优先解决。 请不要在邮件列表或私人信件中发送错误报告,Github的issue区同样可以提出对于Swoole

  • 提交表单时出错 当请求的凭据模式为“包括”时,响应中的“访问控制允许来源”标头的值不得为通配符“*”。起源'https://local.oto.com因此,不允许访问。

  • 我正在使用tinyMCE-4.0。16以cakePHP2的形式。4.当我单击submit时,表单不提交,并在控制台中出现以下错误 具有name='data[Research][description]'的无效窗体控件不可聚焦。 我在文本区使用HTML5验证“必需”。

  • 我们在每次本地提交时都会遇到此错误: Git失败,出现致命错误。错误:打开(“.vs/XXXXXX.Dev.Library/v15/Server/sqlite3/db.lock”):权限被拒绝致命:无法处理路径。vs/XXXXXX。Dev.Library/v15/Server/sqlite3/db。锁 这是一个全新的VS2017安装,使用本地git存储库,然后才能同步到Azure DevOps g

  • Commit(提交)就是把修改保存到仓库里。 用法 git commit 选项 -a(--all),把所有修改与删除自动添加到暂存区然后提交。不包含未跟踪文件。 -m(--message),设置提交信息。 练习 1,打开 resources.md ,添加一行文字: # 相关资源 保存文件,再去修改一下: git commit -am '设置相关资源文档标题' 这次用了 -a 选项,它会自动把