我正在为电影运行一个sql数据库,我正在处理这个函数,这样每当用户签出一部电影时,电影就会被更新,说已经签出,然后签出的电影将被添加到签出电影的表格。我有一个没有任何错误运行的代码,但我的签出电影没有添加到我的签出表。用于显示以下所选电影的网格视图的代码:
<asp:ListBox ID="CheckOutList" runat="server" OnSelectedIndexChanged="Get_data" AutoPostBack="true">
</asp:ListBox>
<asp:Panel ID="panel5" runat="server" Visible="false">
<asp:GridView id="one_data" AutoGenerateColumns="false" runat="server" DataKeyNames="MovieID">
<Columns>
<asp:BoundField DataField="MovieID"
HeaderText="Movie ID"/>
<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>
检查电影的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');
//command.Parameters.AddWithValue("@MovieID",);
command.Parameters.AddWithValue("@MovieID", CheckOutList.SelectedValue);
reader = command.ExecuteReader();
one_data.DataSource = reader;
one_data.DataBind();
reader.Close();
command = new SqlCommand("INSERT INTO checkout (MovieID, SubscriberID) VALUES @MovieID, @SubscriberID", connection);
command.Parameters.AddWithValue("@MovieID", CheckOutList.SelectedValue);
command.Parameters.AddWithValue("@SubscriberID", loginName.Text);
command.ExecuteNonQuery();
}
catch (Exception err)
{
// Handle an error by displaying the information.
lblInfo.Text = "Error reading the database. ";
lblInfo.Text += err.Message;
}
finally
{
connection.Close();
lblInfo.Text = "Movie Checked Out";
}
}
UPDATE SQL语句确实可以说电影已经拍摄,但电影没有被添加到签出的表格中。
答案 0 :(得分:1)
我认为你最好在事务块中执行编码。您也可以使用&#34;;&#34;
更新以下考试 connection.ConnectionString = connectionString;
command.CommandText = @"
UPDATE MultiStatementTest SET somevalue = somevalue + 1;
UPDATE MultiStatementTest SET" + (generateError ? "WONTWORK" : "") +
" somevalue = somevalue + 2;";
command.CommandType = System.Data.CommandType.Text;
command.Connection = connection;
答案 1 :(得分:1)
我看到一些缺失的概念。
command.ExecuteReader();
时更新使用command.ExecuteNonQuery();
。
的ExecuteNonQuery
INSERT INTO checkout (MovieID, SubscriberID) VALUES @MovieID, @SubscriberID
。
INSERT INTO checkout(MovieID,SubscriberID)VALUES(@MovieID,@ SubscriberID)
我希望这能解决你的问题。
答案 2 :(得分:0)
请更改这样的代码并尝试在executiontenonquery()之后更改reader.close()。
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');
//command.Parameters.AddWithValue("@MovieID",);
command.Parameters.AddWithValue("@MovieID", CheckOutList.SelectedValue);
reader = command.ExecuteReader();
one_data.DataSource = reader;
one_data.DataBind();
command = new SqlCommand("INSERT INTO checkout (MovieID, SubscriberID) VALUES @MovieID, @SubscriberID", connection);
command.Parameters.AddWithValue("@MovieID", CheckOutList.SelectedValue);
command.Parameters.AddWithValue("@SubscriberID", loginName.Text);
command.ExecuteNonQuery();
reader.Close();
}
答案 3 :(得分:0)
我在阅读完所有帖子后终于找到了答案,发现这实际上让我的INSERT工作了
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');
//command.Parameters.AddWithValue("@MovieID",);
command.Parameters.AddWithValue("@MovieID", CheckOutList.SelectedValue);
//reader = command.ExecuteReader();
command.ExecuteNonQuery();
one_data.DataSource = reader;
one_data.DataBind();
connection.Close();
connection.Open();
command = new SqlCommand("INSERT INTO checkout (MovieID, SubscriberID) VALUES (@MovieID, @SubscriberID)", connection);
command.Parameters.AddWithValue("@MovieID", CheckOutList.SelectedValue);
command.Parameters.AddWithValue("@SubscriberID", loginName.Text);
command.ExecuteNonQuery();
//reader.Close();
}