Member 13888538 Ответов: 3

Не удалось найти устанавливаемый isam (ошибка)


namespace Excel_to_Access
{
    public partial class Defult : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            int rollno;
            String sname;
            String fname;
            String sclass;
            string path = Path.GetFileName(FileUpload1.FileName);
            path = path.Replace(" ", "");
            FileUpload1.SaveAs(Server.MapPath("~/ExcelFile/") + path);
            String ExcelPath = Server.MapPath("~/ExcelFile/") + path;

            string mycon = "Provider = Microsoft.Jet.OLEDB.4.0;Data Source=" + ExcelPath + ";Extend Properties=Excel 8.0;Persist Security Info = False";
            OleDbConnection conn = new OleDbConnection(mycon);
            conn.Open(); 
            OleDbCommand cmd = new OleDbCommand("SELECT * FROM [Sheet1$]", conn);
            OleDbDataReader dr = cmd.ExecuteReader();
            while (dr.Read())
            {
//Response.Write("<br>"+dr[0].ToString());
                rollno = Convert.ToInt32(dr[0].ToString());
                sname = dr[1].ToString();
                fname = dr[2].ToString();
                sclass = dr[3].ToString();
                savedata(rollno, sname, fname, sclass);
 }

            Label1.Text = "Data Has Been Saved Successfully";
        }

        private void savedata(int rollno1, String sname1, String fname1, String sclass1)
        {
            OleDbConnection con;
            OleDbCommand com;
            con = new OleDbConnection("Provider= Microsoft.Jet.OLEDB.4.0;Data Source" + Server.MapPath("~/App_Data/StudentData.accdb") + ";Persist Security Info=False");
            con.Open();
            String data1;
            data1 = "insert into studentdetails values(" + rollno1 + ",'" + sname1 + "','" + fname1 + "','" + sclass1 + "')";
            com = new OleDbCommand(data1, con);
            com.ExecuteNonQuery();
            con.Close();
            Label1.Text = "Data Has Been Upload to MS Access Database Successfully";
        }
    }
}

What I have tried:

<pre>string mycon = "Provider = Microsoft.Jet.OLEDB.4.0;Data Source=" + ExcelPath + ";Extend Properties=Excel 8.0;Persist Security Info = False";
            OleDbConnection conn = new OleDbConnection(mycon);
            conn.Open();

F-ES Sitecore

google "не смог найти устанавливаемый isam", вы найдете множество возможных решений.

Richard MacCutchan

Вам необходимо установить библиотеку драйверов. Но Jet уже довольно стар, вам было бы лучше с Microsoft.Ace.OLEDB.12.0

Maciej Los

Мой виртуальный 5!

3 Ответов

Рейтинг:
2

Patrice T

data1 = "insert into studentdetails values(" + rollno1 + ",'" + sname1 + "','" + fname1 + "','" + sclass1 + "')";

Не решение вашего вопроса, а еще одна проблема, которая у вас есть.
Никогда не создавайте SQL-запрос путем объединения строк. Рано или поздно вы сделаете это с помощью пользовательских вводов, и это откроет дверь к уязвимости под названием "SQL-инъекция", она опасна для вашей базы данных и подвержена ошибкам.
Одна кавычка в имени - и ваша программа выйдет из строя. Если пользователь вводит имя, например "Брайан О'Коннер", может привести к сбою вашего приложения, это уязвимость SQL-инъекции, и сбой-это наименьшая из проблем, вредоносный пользовательский ввод, и он продвигается к командам SQL со всеми учетными данными.
SQL-инъекция - Википедия[^]
SQL-инъекция[^]
Атаки SQL-инъекций на примере[^]
PHP: SQL-инъекция - руководство пользователя[^]
Шпаргалка по предотвращению инъекций SQL - OWASP[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? - Обмен Стеками Информационной Безопасности[^]


Рейтинг:
1

OriginalGriff

Обычная причина этого заключается в том, что вы пытаетесь использовать 64-битное приложение: реактивный двигатель никогда не выпускался в 64-битной версии, поэтому вы вообще не можете получить доступ к Jet из 64-битного приложения.

Лучшее решение - переключиться на ACE вместо этого-он поставляется в 32-и 64-битных версиях, но также можно изменить ваше приложение на 32-битное, если вы должны использовать Jet. Имейте в виду, что вам также нужно будет использовать 32-битные версии каждой сборки DLL, на которую ссылается ваше приложение, иначе они тоже не будут работать. Следовательно, обновление до Ace вместо этого...


Рейтинг:
0

Maciej Los

Ваша строка подключения неверна, потому что вы пытаетесь подключиться к MS Access 2007 и выше в старом драйвере:

"Provider= Microsoft.Jet.OLEDB.4.0;Data Source" + Server.MapPath("~/App_Data/StudentData.accdb"

Вы должны использовать ACE.OLEDB.12.0, что уже было упомянуто. Видеть: Строки подключения доступа - ConnectionStrings.com[^]

Примечание: Вы должны скачать[^] и установите Microsoft Access Database Engine 2010 (32/64), распространяемый на сервере, прежде чем начать использовать обновленный код.