【问题标题】:Must Declare Scalar Value?必须声明标量值?
【发布时间】:2017-11-28 15:45:28
【问题描述】:

我正在使用 SQL 和 c# 完成我的任务。对于这个任务,我正在运行一个电影数据库,但我被困在必须查看电影的部分。我不断收到“必须声明标量值”,但我不确定该怎么做。 我的代码:

 <asp:Panel ID="panel5" runat="server" Visible="false">
        <asp:GridView id="one_data" AutoGenerateColumns="false" runat="server" DataKeyNames="MovieID">
            <Columns>

                <asp:BoundField DataField="MovieTitle"
                    HeaderText="Movie"/>
                <asp:BoundField DataField="DateChecked"
                    HeaderText="Date Checked"/>
                <asp:BoundField DataField="CheckedOut"
                    HeaderText="Checked Out"/>
            </Columns>
        </asp:GridView>
        <asp:Button runat="server" Text="Choose another Movie" OnClick="GoBack" />
        <asp:Button runat="server" Text="Check Out" OnClick="CheckOut" />
    </asp:Panel>

面板 5 获取用户选择的选定电影,当他们点击结帐按钮时,“DateChecked”和“CheckedOut”字段应该填写日期,“Y”表示“是”。 客服代码:

public void CheckOut(object sender, EventArgs e)
    {
        get_connection();
        try
        {

            connection.Open();
            command = new SqlCommand("UPDATE Content SET DateChecked=@DateChecked, CheckedOut=@CheckedOut WHERE MovieID=@MovieID", connection);
            command.Parameters.AddWithValue("@DateChecked", DateTime.Now);
            command.Parameters.AddWithValue("@CheckedOut", 'Y');

            reader = command.ExecuteReader();
            one_data.DataSource = reader;
            one_data.DataBind();



            reader.Close();
        }

我省略了 catch 部分,因为它不重要。当我点击结帐电影按钮时,我不断收到错误消息,如果我删除 WHERE 子句,它会起作用,除了所有电影都更新而不是我选择的电影。有什么办法可以解决这个问题?

【问题讨论】:

  • 您没有为 @MovieID 值添加 SQL 参数
  • @Igor ExecuteNonQuery 更有意义。 ExecuteScalar 确实适用于您希望获得一行和一列的查询。

标签: c# sql asp.net database scalar


【解决方案1】:

您的 UPDATE 命令具有三个值,它们是使用 @ 定义的

您已指定其中两个,但未指定 @MovieID

command = new SqlCommand("UPDATE Content SET DateChecked=@DateChecked, CheckedOut=@CheckedOut WHERE MovieID=@MovieID", connection);
            command.Parameters.AddWithValue("@DateChecked", DateTime.Now);
            command.Parameters.AddWithValue("@CheckedOut", 'Y');

因此,它将无法形成一些有效的 SQL。您需要添加电影 ID

command.Parameters.AddWithValue("@MovieID", movieId);

大概你会从你的电影标题的边界中得到这个。

【讨论】:

  • 如何从 boundfield 中获取 movieid?
  • 这里有几个步骤你需要了解,基本上你需要使用RowCommand事件来获取特定的行,如果你每行有一个按钮,而不是OnClick,那么在你的RowCommand中你可以访问 gridview 行中的所有值并检索与您相关的值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-03
  • 1970-01-01
  • 2013-07-03
  • 1970-01-01
相关资源
最近更新 更多