将所选值添加到用户配置文件

时间:2013-12-23 16:50:41

标签: c# sql database insert

好的我有一个按钮并且点击它会将选择值的数量减少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();
    }
}

2 个答案:

答案 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);