【问题标题】:SqlException Incorrect syntax near '?'SqlException '?' 附近的语法不正确
【发布时间】:2016-09-26 12:55:51
【问题描述】:

我的查询出现 sql 异常:

[SqlException (0x80131904): '?' 附近的语法不正确。不正确 关键字“用户”附近的语法。]

我做错了什么?这个例外是什么意思?

protected void Submit_Click(object sender, EventArgs e)
{
    string myConnection = @"Data Source=REDDEVIL;Initial..."

    SqlConnection conn = new SqlConnection(myConnection);

    HttpPostedFile postedFile = FileUpload1.PostedFile;
    string fileName = Path.GetFileName(postedFile.FileName);
    string fileExtension = Path.GetExtension(fileName);

    if (fileExtension.ToLower() == ".jpg" || fileExtension.ToLower() == ".bmp" ||
        fileExtension.ToLower() == ".gif" || fileExtension.ToLower() == ".png")
    {
        Stream stream = postedFile.InputStream;
        BinaryReader binaryReader = new BinaryReader(stream);
        byte[] bytes = binaryReader.ReadBytes((int)stream.Length);

        string query2 = "INSERT INTO Manager (ID,Name,Address,Phone,Cell,Email,DOB,Commission,Comments,Photo,User ID,IsActive) VALUES (?ID,?Name,?Address,?Phone,?Cell,?Email,?DOB,?Commission,?Comments,?Photo,?User_ID,?IsActive)";
        SqlCommand cmd2 = new SqlCommand(query2, conn);
        cmd2.Parameters.AddWithValue("?ID", mgrID.Text);
        cmd2.Parameters.AddWithValue("?Name", Name.Text);
        cmd2.Parameters.AddWithValue("?Address", address.Text);
        cmd2.Parameters.AddWithValue("?Phone", phoneNo.Text);
        cmd2.Parameters.AddWithValue("?Cell", CellNo.Text);
        cmd2.Parameters.AddWithValue("?Email", email.Text);
        cmd2.Parameters.AddWithValue("?DOB", dob.Text);
        cmd2.Parameters.AddWithValue("?Commission", commission.Text);
        cmd2.Parameters.AddWithValue("?Comments", comments.Text);
        cmd2.Parameters.AddWithValue("?Photo", bytes);
        cmd2.Parameters.AddWithValue("?User_ID", System.DBNull.Value);
        cmd2.Parameters.AddWithValue("?IsActive", System.DBNull.Value);
        conn.Open();
        cmd2.ExecuteNonQuery();
        conn.Close();

        Response.Redirect("~/Views/Portal/Dashboard.aspx");
    }
    else
    {
    }
}

任何帮助将不胜感激。

【问题讨论】:

  • 您是使用 Oracle 还是 Sql Server 作为数据库?
  • 我正在使用 Sql Server
  • 使用@ 而不是? 你是怎么想出? 的?
  • 您使用的是 SqlProvider ,您不需要使用 @ 而不是 '? ' ?
  • 顺便说一句 - 你的 else(至少在上面的代码中)是多余的,可以删除

标签: c# asp.net


【解决方案1】:

要指定它是一个参数,您应该在 sql 查询中使用 @ 而不是 ?。然后在创建参数时,您也不需要?

string query2 = "INSERT INTO Manager (ID,Name,Address,Phone,Cell,Email,DOB,Commission,Comments,Photo,User_ID,IsActive) VALUES (@ID,@Name,@Address,@Phone,@Cell,@Email,@DOB,@Commission,@Comments,@Photo,@User_ID,@IsActive)";

SqlCommand cmd2 = new SqlCommand(query2, conn);
cmd2.Parameters.AddWithValue("ID", mgrID.Text);

正如蒂姆在本节中注意到的那样,您正在指定您拥有的字段...USER ID,.... - 我假设您在两者之间缺少_。 (如果它确实被称为user,那么请参阅蒂姆的建议与[]

【讨论】:

  • 但另一个问题是 - 甚至在错误消息中提到 - 他使用关键字User,他必须将其放在括号中:[User]
  • @TimSchmelter - 是的。更正的答案。顺便说一句,我认为这是一个错字,并且它缺少 _ 而不是它是一个名为 USER 的字段 - 但可能是
【解决方案2】:

定义列名有它自己的规则,你已经定义了列名

,用户 ID,

这是不正确的,它必须是一个单词,所以你必须把它放在括号里像

,[用户 ID],

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-09
    • 2021-01-23
    • 2011-05-28
    • 1970-01-01
    • 2020-11-03
    • 2019-04-13
    • 1970-01-01
    • 2010-11-27
    相关资源
    最近更新 更多