【问题标题】:Why I get Syntax error in INSERT INTO statement?为什么我在 INSERT INTO 语句中出现语法错误?
【发布时间】:2014-09-29 09:47:56
【问题描述】:
protected void btnUpload_Click(object sender, EventArgs e)
{
    if (FileUpload1.PostedFile != null)
    {
        string FileName = Path.GetFileName(FileUpload1.PostedFile.FileName);
        //Save files to disk
        FileUpload1.SaveAs(Server.MapPath("" + FileName));

        //Add Entry to DataBase
        String strConnString = System.Configuration.ConfigurationManager.ConnectionStrings["conString"].ConnectionString;

        OleDbConnection con = new OleDbConnection(strConnString);

        string strQuery = "INSERT INTO image([FileName],[FilePath],[AlbumName]) Values(@FN, @FP, @AN)";

        OleDbCommand cmd = new OleDbCommand(strQuery);

        cmd.Parameters.AddWithValue("@FN", FileName);
        cmd.Parameters.AddWithValue("@FP", "images/" + FileName);
        cmd.Parameters.AddWithValue("@AN", txtAlbumname.Text.ToString());

        cmd.CommandType = CommandType.Text;
        cmd.Connection = con;
        try
        {
            con.Open();
            cmd.ExecuteNonQuery();
        }

        catch (Exception ex)
        {
            Response.Write(ex.Message);
        }

        finally
        {
            con.Close();
            con.Dispose();
        }
    }
}
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
    string var = DropDownList1.SelectedItem.ToString();
    txtAlbumname.Text = var.ToString();
}
}

我几乎尝试了所有方法,但此错误不断出现。 保留字的情况下,我也加了括号,但仍然显示此错误

【问题讨论】:

  • 请包括错误。
  • 试试 INSERT INTO image(FileName,FilePath,AlbumName) Values(@FN, @FP, @AN)";
  • @ByteBlast 我已经在 Inser INto 语句中包含了语法错误的错误
  • @KhurramAli 也不工作
  • 能否尝试将查询中的参数名称替换为问号(VALUES (?, ?, ?))?可能是 OleDbQueries 在替换命名参数时遇到问题。请确保您的AddWithValue 行符合要求的顺序才能正常工作。

标签: c# asp.net ms-access


【解决方案1】:

OLE DB .NET 提供程序不支持在 CommandType 设置为 Text 时将参数传递给 SQL 语句或由 OleDbCommand 调用的存储过程的命名参数。在这种情况下,必须使用 question mark (?) 占位符。例如:

SELECT * FROM Customers WHERE CustomerID = ?

因此OleDbParameter对象添加到OleDbParameterCollection的顺序必须直接对应于命令文本中参数的问号占位符的位置。

举例

OleDbCommand command = new OleDbCommand(queryString, connection);
command.CommandText = 
    "SELECT CustomerID, CompanyName FROM Customers WHERE Country = ? AND City = ?";
command.Parameters.Add(parameters);

for (int j=0; j<parameters.Length; j++)
{
    command.Parameters.Add(parameters[j]) ;
}

供参考.. MSDN

【讨论】:

    【解决方案2】:

    IMAGE 是 Access SQL 中的 reserved word,因此要将其用作表名,您还必须将其括在方括号中:

    string strQuery = "INSERT INTO [image] ([FileName], ...
    

    【讨论】:

    • 非常感谢!! :) 成功了
    猜你喜欢
    • 1970-01-01
    • 2016-10-05
    • 2017-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多