2013-10-07 4 views
2

Это мой код, который я использую для загрузки данных в базу данных SQL Server.Загрузка данных Excel в SQL Server Ошибка

Он работал пару раз, но теперь в Просмотрите текстовое поле сказать, что файл не выбран.

Я пытался отладки и проверил

strFilepPath = DirectoryPath + FileUpload1.FileName; 

фактически имеет путь к выбранному файлу.

В отладки кода не пробежать мимо sqlBulk.WriteToServer(ds.Tables[0]);

protected void btnImport_Click(object sender, EventArgs e) 
{ 
    string strFilepPath; 

    // Create a Connection String 
    string CS = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString; 

    // SqlConnection is in System.Data.SqlClient namespace 
    using (SqlConnection con = new SqlConnection(CS)) 
    { 
     // SqlCommand to Drop and Re-Create Table 
     string DropString = "USE Sit302GroupProject IF OBJECT_ID('students', 'U') IS NOT NULL DROP TABLE students;"; 

     string CreateString = "USE Sit302GroupProject " + 
      "CREATE TABLE students " + 
      "(student_id int Not Null, " + 
      "first_name nvarchar (255) Not Null, " + 
      "surname nvarchar (255) Not Null, " + 
      "email nvarchar (255) Not Null, " + 
      "campus nvarchar (255) Not Null, " + 
      "enrollment_status nvarchar (255) Not Null, " + 
      "project_type nvarchar (255) Not Null, " + 
      "group_id nvarchar (50) Null) "; 

     try 
     { 
      SqlCommand DropCommand = new SqlCommand(DropString, con); 
      SqlCommand CreateCommand = new SqlCommand(CreateString, con); 

      con.Open(); 

      CreateCommand.ExecuteNonQuery(); 
      DropCommand.ExecuteNonQuery(); 

      con.Close(); 
     } 
     catch (Exception ex1) 
     { 
      ScriptManager.RegisterStartupScript(Page, GetType(), "script1", 
      "alert('error occured: " + ex1.Message.ToString() + "');", true); 
     } 
    } 

    DataSet ds = new DataSet(); 
    string strConnection = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString; 

    if (FileUpload1.HasFile) 
    { 
     try 
     { 
      FileInfo fi = new FileInfo(FileUpload1.PostedFile.FileName); 
      string ext = fi.Extension; 

      if (ext == ".xls" || ext == ".xlsx") 
      { 
       string filename = Path.GetFullPath(FileUpload1.PostedFile.FileName); 
       string DirectoryPath = Server.MapPath("~/UploadExcelFile//"); 
       strFilepPath = DirectoryPath + FileUpload1.FileName; 

       Directory.CreateDirectory(DirectoryPath); 

       FileUpload1.SaveAs(strFilepPath); 

       string strConn = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + strFilepPath + ";Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1\""; 

       OleDbConnection conn = new OleDbConnection(strConn); 
       conn.Open(); 

       OleDbCommand cmd = new OleDbCommand("SELECT * FROM [Sheet1$]", conn); 

       OleDbDataAdapter da = new OleDbDataAdapter(cmd); 
       da.Fill(ds); 

       SqlBulkCopy sqlBulk = new SqlBulkCopy(strConnection, SqlBulkCopyOptions.KeepIdentity); 
       sqlBulk.DestinationTableName = "students"; 
       sqlBulk.WriteToServer(ds.Tables[0]); 

       conn.Close(); 
       sqlBulk.Close(); 

       Array.ForEach(Directory.GetFiles(@DirectoryPath), File.Delete); 

       ScriptManager.RegisterStartupScript(Page, GetType(), "script1", 
       "alert('Excel file successfully imported into DB');", true); 

       return; 
      } 
      else 
      { 
       ScriptManager.RegisterStartupScript(Page, GetType(), "script1", 
       "alert('Please upload excel file only');", true); 
       return; 
      } 
     } 
     catch (Exception ex) 
     { 
      DeleteExcelFile(FileUpload1.FileName); 
      ScriptManager.RegisterStartupScript(Page, GetType(), "script1", 
       "alert('error occured: " + ex.Message.ToString() + "');", true); 
      return; 
     } 
    } 
    else 
    { 
     ScriptManager.RegisterStartupScript(Page, GetType(), "script1", 
     "alert('Please upload excel file');", true); 
     return; 
    } 
} 

protected void DeleteExcelFile(string Name) 
{ 
    if (Directory.Exists(Request.PhysicalApplicationPath + 
    "UploadExcelFile\\")) 
    { 
     string[] logList = Directory.GetFiles(Request.PhysicalApplicationPath 
     + "UploadExcelFile\\", "*.xls"); 
     foreach (string log in logList) 
     { 
      FileInfo logInfo = new FileInfo(log); 
      string logInfoName = logInfo.Name.Substring(0, 
      logInfo.Name.LastIndexOf('.')); 
      if (logInfoName.Length >= Name.Length) 
      { 
       if (Name.Equals(logInfoName.Substring(0, Name.Length))) 
       { 
        logInfo.Delete(); 
       } 
      } 
     } 
    } 
} 
+1

Сначала вы создаете таблицу, и на следующей строке вы падаете снова ?! ?!?!? Кажется, не имеет большого смысла ..... –

+1

@marc_s благодарит человека, что в точности было проблемой. Я поставил заявление в неправильном порядке. – user2345661

+0

@ user2345661 Не помещайте «вопрос» в заголовок вопроса. Мы знаем, что проблема решена, когда у нее есть принятый ответ. –

ответ

0

Это кажется странным, что вы сначала создать таблицу, а в следующей строке, вы падаете снова ...

SqlCommand DropCommand = new SqlCommand(DropString, con); 
SqlCommand CreateCommand = new SqlCommand(CreateString, con); 

con.Open(); 

CreateCommand.ExecuteNonQuery(); // creates "dbo.students" 
DropCommand.ExecuteNonQuery(); // drops that same "dbo.students" right away .... 

con.Close(); 

Таким образом, в конце концов - вы не имеете таблицу навалом вставить данные в ...

Смежные вопросы