Почему я получаю синтаксическую ошибку в инструкции INSERT INTO?

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

Я пробовал почти все, но эта ошибка продолжается. Я надел скобки и оставил зарезервированные слова, но эта ошибка показывается

  • 2
    Пожалуйста, включите ошибку.
  • 0
    попробуйте INSERT INTO image (FileName, FilePath, AlbumName) Значения (@FN, @FP, @AN) ";
Показать ещё 4 комментария
Теги:
ms-access

2 ответа

1
Лучший ответ

Поставщик OLE DB.NET не поддерживает именованные параметры для передачи параметров в оператор SQL или хранимую процедуру, OleDbCommand когда CommandType установлен в Text. В этом случае необходимо использовать 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

0

IMAGE является зарезервированным словом в Access SQL, поэтому для использования его в качестве имени таблицы вы также должны заключать его в квадратные скобки:

string strQuery = "INSERT INTO [image] ([FileName], ...
  • 0
    Большое спасибо !! :) это сработало

Ещё вопросы

Сообщество Overcoder
Наверх
Меню