当前位置: 首页 > 面试题库 >

使用SqlCommand.Parameters ASP.NET的C#更新表

程枫
2023-03-14
问题内容

这个问题已经在这里有了答案

11年前关闭。

可能重复:

使用SqlCommand.Parameters的C#更新表

我正在尝试使用SqlCommand更新SQL Server表,我认为这是我的T-SQL的语法错误,但是到目前为止,这是我所拥有的:

SqlCommand sqlCmd = new SqlCommand(
   "UPDATE yak_tickets 
    SET email = @emailParam, subject = @subjectParam, text = @textParam, 
        statusid = @statusIDParam, ticketClass = @ticketClassParam 
    WHERE id = @ticketIDParam", sqlConn);

参数正在按应有的方式工作,但是,当我运行代码时,表永远不会更新。任何帮助将不胜感激=)

这是其余的代码:

    #region Parameters
    /* Parameters */
    sqlCmd.Parameters.Add("@ticketIDParam", SqlDbType.BigInt);
    sqlCmd.Parameters["@ticketIDParam"].Value = ticketID;

    sqlCmd.Parameters.Add("@emailParam", SqlDbType.NVarChar);
    sqlCmd.Parameters["@emailParam"].Value = ticketToBeSubmitted.getEmail();

    sqlCmd.Parameters.Add("@subjectParam", SqlDbType.NVarChar);
    sqlCmd.Parameters["@subjectParam"].Value = ticketToBeSubmitted.getSubject();

    sqlCmd.Parameters.Add("@textParam", SqlDbType.Text);
    sqlCmd.Parameters["@textParam"].Value = ticketToBeSubmitted.getTicketContent();

    sqlCmd.Parameters.Add("@statusIDParam", SqlDbType.NVarChar);
    sqlCmd.Parameters["@statusIDParam"].Value = ticketToBeSubmitted.getStatus();

    sqlCmd.Parameters.Add("@ticketClassParam", SqlDbType.NVarChar);
    sqlCmd.Parameters["@ticketClassParam"].Value = ticketToBeSubmitted.getTicketClass();
    #endregion

    #region Try/Catch/Finally
    /* Try/Catch/Finally */

    try
    {
        sqlConn.Open();
        sqlCmd.ExecuteNonQuery();
    }
    catch (SqlException sqlEx)
    {
        sqlErrorLabel.Text = sqlEx.ToString();
        sqlErrorLabel.ForeColor = System.Drawing.Color.Red;
    }
    finally
    {
        sqlConn.Close();
    }

以及方法的签名:

  public static void updateTicketInDatabase(Ticket ticketToBeSubmitted, Label sqlErrorLabel, int ticketID)

我已经通过探查器运行了它,下面是它的作用。

Page Loads ->
Audit Login: -- Sets a bunch of stuff (irrelevant)
SQL:BatchStarting -- SELECT * from yak_tickets
SQL:BatchCompleted -- SELECT * from yak_tickets
Audit Logout


Button Click Event ->
RPC:Completed: -- exec sp_reset_connection
Audit Login: -- Sets some more stuff
SQL:BatchStarting -- SELECT * from yak_tickets
SQL:BatchCompleted -- SELECT * from yak_tickets

这是表单文件的背后代码。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using YakStudios_Support.Includes;

namespace YakStudios_Support.ys_admin
{
    public partial class UpdateTicket : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            int ticketID = Convert.ToInt32(Request.QueryString["ticketID"]); // Grabs the ?ticketid number from the URL
            Ticket ticketBeingUpdated = TicketDatabase.selectTicketFromDatabase(sqlErrorLabel, 1); // Creates a new Ticket object to be used by the form to populate the text boxes

            /* Form Field Population */
            // Email
            emailTxt.Text = ticketBeingUpdated.getEmail();

            // Date Submitted
            dateSubText.Text = ticketBeingUpdated.getDateSubmitted().ToString();

            // Ticket Class
            classDropDown.SelectedValue = ticketBeingUpdated.getTicketClass();

            // Ticket Status
            statusDrop.SelectedValue = ticketBeingUpdated.getStatus();

            // Subject
            subjectTxt.Text = ticketBeingUpdated.getSubject();

            // Text
            textTxt.Text = ticketBeingUpdated.getTicketContent();
        }

        protected void editBtn_Click(object sender, EventArgs e)
        {
            emailTxt.Enabled = true;
            dateSubText.Enabled = true;
            classDropDown.Enabled = true;
            statusDrop.Enabled = true;
            subjectTxt.Enabled = true;
            textTxt.Enabled = true;
        }

        protected void submitBtn_Click(object sender, EventArgs e)
        {
            int ticketID = Convert.ToInt32(Request.QueryString["ticketID"]); // Grabs the ?ticketid number from the URL
            DateTime convertedDate = Convert.ToDateTime(dateSubText.Text);
            Ticket ticketUpdated = new Ticket(emailTxt.Text, convertedDate, subjectTxt.Text, textTxt.Text, statusDrop.SelectedValue, classDropDown.SelectedValue);
            //Ticket ticketUpdated = new Ticket(emailTxt.Text, subjectTxt.Text, textTxt.Text, classDropDown.SelectedValue);
            Response.Write(TicketDatabase.updateTicketInDatabase(ticketUpdated, sqlErrorLabel, 1));
            //Response.Redirect("ticketqueue.aspx");
        }
    }
}

在我看来,它正在执行的是再次运行我的select方法,这是页面加载时应该执行的操作。这是由刷新页面的按钮引起的吗?


问题答案:

在ExecuteNonQuery处添加一个断点,检查sqlCommand对象,使用sqlcommand查看参数,并确保将TicketId设置为您期望的值,因为更新是由ticketId驱动的,因此请确保其设置正确,或尝试直接在SQL
Server上直接运行TSQL等效项,我猜是没有设置ticketId变量,乍一看代码看起来还不错。



 类似资料:
  • 问题内容: 我有一个上面带有Web表单的网页。该表单已预填充了SQL Server数据库中的数据。用户可以进入并编辑任何字段,然后单击底部的“保存”按钮以更新数据库中的记录。由于某种原因,当我将表格预先填充数据时,update语句不会更新数据库中的记录。如果我删除了页面加载方法上预先填写表单的代码,则update语句将按预期工作。当我在页面加载方法中用数据预先填充表单时,update语句似乎正在使

  • 我痛苦了3天。我正在使用兼容性库中的视图分页程序。我已经成功地让它显示了几个视图。我的问题是,当我交换视图时,不会在它的回收器视图中按片段更新数据。但当我关闭应用程序时,打开碎片会按回收器视图显示更新内容。我使用了所有方法,如setnotifydatachanged()和许多其他方法,但viewpager中的片段不更新内容。感谢所有的帮助,这是我的主要活动

  • 因此,我在DynamoDB中有一项: 我想添加一个新的属性到上述项目,属性是: 现在,我在JS中使用AWS-SDK这样做: 但是,我得到一个错误: ExpressionAttributeValue包含无效值:一个或多个参数值无效:AttributeValue不能包含key:newAttr的空字符串 所以如果我是这样就可以了,但我不希望这个新属性是一个字符串,我希望它是一个列表。 那么我做错了什么?

  • 问题内容: 我有一个动态数据源,它经常在浏览器中创建一个新的json。 我能够使用下面的代码从这个json创建饼图(也在这个小提琴中) 此数据经常更新,那么更新饼图的最佳方法是什么?看看这个小提琴。在这里,我还有另一个名为data2的json。 我怎样才能简单地用data2替换数据并使饼动画化/更新? 注意:在某些更新中,值可能== 0 问题答案: 我已经创建了一个有效的版本,并将其发布在这里:h

  • 我正在尝试使用此查询更新一些记录,这基本上只是一种为客户设置“状态”的方法,考虑到他们“自上次订单以来的日子”: 但是我得到了: 错误代码: 1175年。您正在使用安全更新模式,并且您尝试更新不使用使用 KEY 列的 WHERE 的表 要禁用安全模式,请切换首选项中的选项 - 我在最终 中使用表键, 是表键。使用 不是一个选项。我还尝试使用 (我想我看到了曙光,但是没有),得到一个< code>P

  • 问题内容: 我希望有人可以验证这是否是使用liquibase填充数据库的正确语法和正确方法吗?所有,我想要的是更改表中一行的值,而我这样做是这样的: 我想要的只是在某个表中的一行中更改一个值。上面的方法不起作用,尽管应用程序已编译并且没有抱怨,但是可惜的是,该值没有改变。 谢谢 问题答案: 对的,这是可能的。请参见以下语法: Liquibase更新中的更多信息