好的我有一个按钮并且点击它会将选择值的数量减少1.这是有效的,接下来它将选择的选项添加到名为Rented的用户配置文件中的列。 当我运行代码时,它告诉我我错过了一个;从查询,但代码显示没有错误。 这对我来说非常令人费解。 如果有人能够指出我做错了什么就会很棒。
代码
protected void Button2_Click(object sender, EventArgs e)
{
OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\\ASPNetDB.mdb;Persist Security Info=True");
{
da.InsertCommand = new OleDbCommand("INSERT INTO UserProfile (Rented) VALUES (@Rented) WHERE ([UserName] = ?)", conn);
string dvdrent = DG_Latest.SelectedRow.Cells[1].Text;
da.InsertCommand.Parameters.AddWithValue("@Rented", dvdrent);
var myquery = string.Format("UPDATE DVD SET Stock = Stock - 1 WHERE Title = ");
var row = DG_Latest.SelectedRow;
var title = row.Cells[1].Text;
myquery = string.Format(myquery + "'{0}'", title);
conn.Open();
using (OleDbCommand cmd = new OleDbCommand(myquery, conn))
cmd.ExecuteNonQuery();
da.InsertCommand.ExecuteNonQuery();
conn.Close();
conn.Dispose();
}
}
答案 0 :(得分:2)
问题:您没有提供参数UserName
的值。
解决方案:您需要在UserName
命令中提供INSERT INTO
参数的值。
试试这个:
protected void Button2_Click(object sender, EventArgs e)
{
OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\\ASPNetDB.mdb;Persist Security Info=True");
{
da.InsertCommand = new OleDbCommand("INSERT INTO UserProfile (Rented) VALUES (?) WHERE [UserName] = ?", conn);
string dvdrent = DG_Latest.SelectedRow.Cells[1].Text;
OleDbParameter p1 = new OleDbParameter();
OleDbParameter p2 = new OleDbParameter();
da.InsertCommand.Parameters.Add(p1);
da.InsertCommand.Parameters.Add(p2);
p1.Value = dvdrent;
p2.Value = "myusername"; //your username value here
var myquery = string.Format("UPDATE DVD SET Stock = Stock - 1 WHERE Title = ");
var row = DG_Latest.SelectedRow;
var title = row.Cells[1].Text;
myquery = string.Format(myquery + "'{0}'", title);
conn.Open();
using (OleDbCommand cmd = new OleDbCommand(myquery, conn))
cmd.ExecuteNonQuery();
da.InsertCommand.ExecuteNonQuery();
conn.Close();
conn.Dispose();
}
}
答案 1 :(得分:1)
您缺少sql查询中的;
。所以你需要把它改成这个。
myquery = string.Format(myquery + "'{0};'", title);
请注意,title参数后面的文字分号已附加到字符串myquery
。
作为旁注,如果先设置title
然后使用以下方法一次创建整个查询字符串可能会更容易:
var row = DG_Latest.SelectedRow;
var title = row.Cells[1].Text;
var myquery = String.Format("UPDATE DVD SET Stock = Stock - 1 WHERE Title = {0};", title);
编辑:您也错过了INSERT SQL命令中的分号。你需要:
da.InsertCommand = new OleDbCommand("INSERT INTO UserProfile (Rented) VALUES (@Rented) WHERE ([UserName] = ?);", conn);