【问题标题】:add selected value to users profile将选定的值添加到用户配置文件
【发布时间】:2013-12-23 16:50:41
【问题描述】:

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

【问题讨论】:

  • 它在抱怨哪一行?这将有助于追查错误。
  • 高亮 da.InsertCommand.ExecuteNonQuery();在 SQL 语句末尾表示缺少分号 (;)。

标签: c# sql database insert


【解决方案1】:

问题:您没有提供参数UserName 的值。

解决方案:您需要在INSERT INTO 命令中提供UserName 参数的值。

试试这个:

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();
    }
}

【讨论】:

  • 非常好 @Sudhakar Tillapudi 不幸的是,我仍然在 SQL 语句末尾缺少分号 (;)。
  • 你能解释一下你评论的用户名值部分吗?
  • @Beep:你在插入语句中已经给出了`WHERE [UserName] = ?`,所以你应该指定用户名值,比如你想插入哪个用户名
  • 这并没有解决他在查询字符串末尾缺少; 的问题,这是 SQL 错误告诉他的。
  • 嗯我想我可能写错了查询。我正在尝试将 DVD 选择发布在当前登录的用户个人资料下
【解决方案2】:

您在 sql 查询中缺少 ;。所以你需要把它改成这个。

myquery = string.Format(myquery + "'{0};'", 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);

【讨论】:

  • 你有没有按照我上面建议的方式一次性设置查询字符串?
  • 错误 21“字符串”不包含“格式”C:\Users\ben\Dropbox\Ben & Andrew\DataBase\members\Default.aspx.cs 57 20 C:\ 的定义。 ..\members\ 错误 20 在声明之前不能使用局部变量 'row' 错误 22 当前上下文中不存在名称 'myquery' 错误 23 当前上下文中不存在名称 'myquery' 错误 24 名称'myquery' 当前不存在
  • 这是因为string 是内置类型。您可能需要使用String.Format
  • hmm 修复了字符串错误,不过我不确定 myquery 错误
  • 您需要执行var myquery = String.Format("UPDATE DVD SET Stock = Stock - 1 WHERE Title = {0};", title); 来定义变量。抱歉我的代码不完整,我只是想说明缺少的分号。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-06
  • 2022-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-30
相关资源
最近更新 更多