必须声明标量值?
Must Declare Scalar Value?
我正在使用 SQL 和 c# 来完成我的任务。对于这个任务,我是 运行 一个电影数据库,我被困在这部分,我必须检查一部电影。我一直收到 'must declare scalar value' 但我不确定该怎么做。
我的代码:
<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' 是的。
CS代码:
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 子句,它会起作用,除了所有电影都会更新而不是我选择的电影。解决这个问题的办法是什么?
您的 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);
大概你会从电影标题的边界字段中得到这个。
我正在使用 SQL 和 c# 来完成我的任务。对于这个任务,我是 运行 一个电影数据库,我被困在这部分,我必须检查一部电影。我一直收到 'must declare scalar value' 但我不确定该怎么做。 我的代码:
<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' 是的。 CS代码:
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 子句,它会起作用,除了所有电影都会更新而不是我选择的电影。解决这个问题的办法是什么?
您的 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);
大概你会从电影标题的边界字段中得到这个。