Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/91.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我当前的insert语句无效_C#_Html_Asp.net_Asp.net Core Mvc - Fatal编程技术网

C# 我当前的insert语句无效

C# 我当前的insert语句无效,c#,html,asp.net,asp.net-core-mvc,C#,Html,Asp.net,Asp.net Core Mvc,我正在创建一个礼品表单,供用户输入他们的价值观。然而,这些表格过去是有效的,但突然,一天后,它就直接失效了。我不知道哪里出了问题。请帮帮我。这是我的密码。我已经复习过了,我觉得还可以。这个问题一直在发生,我无法确定是什么错误。我认为这与日期有关。在数据库中,我将数据类型设置为DATE CreateGift.cshtml @*Create Gift Page*@ @model SignUp3.Models.Gift; @section MoreScripts { <script src=&q

我正在创建一个礼品表单,供用户输入他们的价值观。然而,这些表格过去是有效的,但突然,一天后,它就直接失效了。我不知道哪里出了问题。请帮帮我。这是我的密码。我已经复习过了,我觉得还可以。这个问题一直在发生,我无法确定是什么错误。我认为这与日期有关。在数据库中,我将数据类型设置为DATE

CreateGift.cshtml

@*Create Gift Page*@
@model SignUp3.Models.Gift;
@section MoreScripts {
<script src="~/lib/moment/moment.min.js"></script>
<link href="~/lib/dtpicker/css/tempusdominus-bootstrap-4.min.css" rel="stylesheet" />
<script src="~/lib/dtpicker/js/tempusdominus-bootstrap-4.min.js"></script>
<link href="~/lib/font-awesome/css/font-awesome.min.css" rel="stylesheet" />
<script src="~/lib/jquery-validate/jquery.validate.min.js"></script>
<script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"></script>

    }
    <!DOCTYPE html>
    <head>
      <meta charset="UTF-8">
           <link rel="stylesheet" href="~/lib/styles/createform.css">
   </head>
   <body>
       <div class="center">
                <form id="createuser" asp-controller="Gift" asp-action="CreateGift"
                         method="post">
                  <h3>Create Gift</h3>
                  <div class="form-group row">
            <label class="control-label col-sm-3" asp-for="description">Description:<span style="color:red;">*</span> </label>
            <div class="col-sm-5">
                <input asp-for="description" placeholder="Full Name" class="form-control" />
            </div>
            <div class="col-sm-3">
                <span asp-validation-for="description" class="text-danger"></span>
            </div>
        </div>
        <div class="form-group row">
            <label class="control-label col-sm-3" asp-for="vouchercode">Voucher Code:<span style="color:red;">*</span> </label>
            <div class="col-sm-5">
                <input asp-for="vouchercode" placeholder="Voucher Code" class="form-control" />
            </div>
            <div class="col-sm-3">
                <span asp-validation-for="vouchercode" class="text-danger"></span>
            </div>
        </div>
        <div class="form-group row">
            <label class="control-label col-sm-3" asp-for="amount">Voucher Amount:<span style="color:red;">*</span> </label>
            <div class="col-sm-5">
                <input asp-for="amount" placeholder="Amount" class="form-control" />
            </div>
            <div class="col-sm-3">
                <span asp-validation-for="amount" class="text-danger"></span>
            </div>
        </div>
        <div class="form-group row">
            <label class="control-label col-sm-3" asp-for="quantity">Quantity:<span style="color:red;">*</span> </label>
            <div class="col-sm-5">
                <input asp-for="quantity" placeholder="Quantity" class="form-control" />
            </div>
            <div class="col-sm-3">
                <span asp-validation-for="quantity" class="text-danger"></span>
            </div>
        </div>
        <div class="form-group row">
            <label class="control-label col-sm-3" asp-for="activation_date">Activation Date:<span style="color:red;">*</span></label>
            <div class="col-sm-5">
                <input asp-for="activation_date" asp-format="{0:yyyy-MM-dd}"
                       class="form-control" placeholder="YYYY-MM-DD" />
            </div>
            <div class="col-sm-3">
                <span asp-validation-for="activation_date" class="text-danger"></span>

            </div>
        </div>

        <div class="form-group row">
            <label class="control-label col-sm-3" asp-for="expiry">Expiry Date:<span style="color:red;">*</span></label>
            <div class="col-sm-5">
                <input asp-for="expiry" asp-format="{0:yyyy-MM-dd}"
                       class="form-control" placeholder="YYYY-MM-DD" />
            </div>
            <div class="col-sm-3">
                <span asp-validation-for="expiry" class="text-danger"></span>

            </div>
        </div>
        <div class="form-group row">
            <div class="offset-sm-3 col-sm-6">
                <input type="submit" value="Submit" class="btn btn-primary" />
            </div>
        </div>

        @if (ViewData["Message"] != null)
        {
            <div class="form-group row">
                <div class="offset-sm-2 col-sm-6">
                    <div class="alert alert-@ViewData["MsgType"]">
                        @Html.Raw(ViewData["Message"])
                    </div>
                </div>
            </div>
        }
    </form>

</div>
这看起来像是由于格式化而导致的插入失败。我不知道这里有什么
DBUtl
,但是:似乎您正在使用
string.Format
来构建SQL,这从根本上说是一个糟糕的想法,因为:

  • SQL注入
  • i18n/l10n(日期/数字格式)
  • 字符串中引号等的处理
  • 查询计划缓存重用
最终,执行此类查询的唯一正确方法是使用参数,而不是字符串替换。由于您在这里编写自己的SQL,您可能会发现Dapper(在NuGet上免费提供)是一个不错的选择:

int-ret=connection.Execute(@)
插入GiftVoucher(说明、金额、凭证代码、数量、激活日期、到期日)
值(@description、@amount、@vouchercode、@quantity、@activation\u date、@expiration)”,礼品);
Dapper将在
gift
上查找可能的成员,并添加sql中提到的成员。或者,anon类型也很有用:

int-ret=connection.Execute(@)
插入GiftVoucher(说明、金额、凭证代码、数量、激活日期、到期日)
值(@description、@amount、@vouchercode、@quantity、@activation\u date、@expiration)”,
新的{gift.description,/*etc*/,gift.expiration});

(当参数来自不同位置时,第二种方法很有用)

从该字符串转换日期时,转换失败
17/12/2020 12:00:00 am

您应该格式化insert参数以满足数据类型
date

gift.expiry.ToString("yyyy-MM-dd")

很明显,您的问题在这一行
DBUtl.ExecSQL(sql,gift.description,gift.amount,gift.vouchercode,gift.quantity,gift.activation\u date,gift.expiration)=1
。从
DBUtil.ExecSQL
返回什么?当结果不是
1
时,这意味着什么?可以返回哪些其他可能的值,它们意味着什么?现在有什么问题?消息
“无效输入”
没有显示?您是否调试过以检查ModelState?@mj1313问题是,当我在表单中输入所有值后单击submit按钮时,它不会返回成功消息,而是进入“else{ViewData[“message”]=“Invalid”;ViewData[“MsgType”]=“danger”“返回视图(“CreateGift”);}“@iwanttopassmyfyp因此方法
DBUtl.ExecSQL
不会返回
1
,返回值的含义是什么,您应该检查它。@mj1313它返回-1的值。为什么会这样?在正常的insert语句中,正确填写表单时,返回值应为1。
gift.expiry.ToString("yyyy-MM-dd")