Сохраните все данные из базы данных в файл, а затем загрузите файл - PullRequest
2 голосов
/ 21 сентября 2011
protected void btnDownload_Click(object sender, EventArgs e)
{
    SqlCommand Command = connection.CreateCommand();
                    SqlDataReader SQLRD;
                    Command.CommandText = "Select *from Attendance";
                   connection.Open();
        SQLRD = Command.ExecuteReader();            
        string data = "";
          while (SQLRD.Read())
        {
            data += SQLRD[0].ToString();
            data += SQLRD[1].ToString();

        }

        SQLRD.Close();
        connection.Close();

        string filename = @"C:\download.csv";
        FileStream fs = new FileStream(filename,FileMode.Append, FileAccess.Write);
        StreamWriter sw = new StreamWriter(fs);
        sw.WriteLine(data);
        sw.Flush();
        sw.Close();
        fs.Close();    }

Это то, что я имею до сих пор. Я хочу сохранить все данные из вышеуказанного запроса в файле. Этот файл будет загружен.

Ответы [ 5 ]

1 голос
/ 21 сентября 2011

Ваш код для сохранения данных в файл будет меняться в зависимости от желаемого формата файла.После сохранения файла используйте HttpResponse.TransmitFile , чтобы отправить файл в браузер.Например, код шаблона будет выглядеть следующим образом:

protected void btnDownload_Click(object sender, EventArgs e)
{
   SqlConnection connection = new SqlConnection(@"Data Source=localhost\SQLEXPRESS;Initial Catalog=PSeminar;Integrated Security=true;Trusted_Connection=Yes;MultipleActiveResultSets=true");

   string query = "SELECT * FROM Attendance";

   // Fetch data using data reader or data adapter
   ...

   // Save the data to file in required format
   string filePath;
   ....

   // Push the file from response
   Response.ContentType = "text/csv"; // set as per file type e.g. text/plain, text/xml etc
   Response.AddHeader("Content-Disposition", "attachment;filename=myfilename.csv"); // will prompt user for save file dialog, use inline instead of attachment to suppress the dialog
   Response.TransmitFile(filePath);
}

См. Другие ответы для кода для хранения файла в каком-либо формате, например xml / csv.

1 голос
/ 21 сентября 2011
protected void btnDownload_Click(object sender, EventArgs e)
{
   MySqlConnection connection = new MySqlConnection(@"Data Source=localhost\SQLEXPRESS;Initial Catalog=PSeminar;Integrated Security=true;Trusted_Connection=Yes;MultipleActiveResultSets=true");

   MySqlCommand myCommand = myConn.CreateCommand();
   MySqlDataReader SQLRD;
   myCommand.CommandText = "SELECT * FROM Attendance";
   connection.Open();
   SQLRD = myCommand.ExecuteReader();
   string data="";
   while (SQLRD.Read())
   {
     data += "Row data, arrange how you want";//SQLRD[0].Tostring();-->first coloum
   }
   SQLRD.Close();
   connection.Close();

   string filename = "F:\file1.txt";  //with path
   FileStream fs = new FileStream(filename, FileMode.Append, FileAccess.Write);
   StreamWriter sw = new StreamWriter(fs);
   sw.WriteLine(data);
   sw.Flush();
   sw.Close();
   fs.Close();
}

РЕДАКТИРОВАННЫЙ КОД: просто скопируйте вставку в свой код и измените путь к имени файла

            MySqlCommand Command = connection.CreateCommand();
            connection.Open();
            //SqlCommand Command = new SqlCommand();
            MySqlDataReader SQLRD;
            Command.CommandText = "Select * from Attendance";
            //connection.Open();
            SQLRD = Command.ExecuteReader();
            string data = "";
            while (SQLRD.Read())
            {
                data += SQLRD[0].ToString()+"\n";
                data += SQLRD[1].ToString()+"\n";

            }

            SQLRD.Close();
            connection.Close();

            string filename = @"F:\download.csv";
            FileStream fs = new FileStream(filename, FileMode.Append, FileAccess.Write);
            StreamWriter sw = new StreamWriter(fs);
            sw.WriteLine(data);
            sw.Flush();
            sw.Close();
            fs.Close();
        }
0 голосов
/ 21 сентября 2011

Вы можете экспортировать его как DataSet на диск следующим образом:

using (var conn = new SqlConnection(@"<your conn str>"))
{
    var ds = new DataSet();
    using (var invoiceCmd = conn.CreateCommand())

    //One of these per table to export
    using(var invoiceAdapter = new SqlDataAdapter(invoiceCmd))
    {
        invoiceCmd.CommandText = "SELECT * FROM Attendance";
        invoiceAdapter.Fill(ds, "Attendance");
    }

    ds.WriteXml(@"C:\temp\foo.xml");
}
0 голосов
/ 21 сентября 2011

Самый простой способ записи в файл - это метод DataTable.WriteXml, который записывает все данные таблицы данных в файл XML, и этот файл позже можно загрузить:

SqlDataAdapter sqlAdap = new SqlDataAdapter(query, connection);
DataTable dt = new DataTable();
sqlAdap.Fill(dt);

string filePath = Server.MapPath("~/filename.xml");
dt.WriteXml(filePath);

Но если вы хотитезапишите эти данные в какой-то конкретный формат, скажем, csv, вы должны перебрать все строки и, используя класс StreamWrite, вы можете записать их в файл.Приведенный ниже код просто для того, чтобы дать вам представление, я не добавил проверки типов или проверки на нулевое значение.

string filePath = Server.MapPath("~/somefile.csv");
System.IO.StreamWriter sw = new System.IO.StreamWriter(filePath);

foreach (DataRow r in dt.Rows)
{
        for (int i = 0; i < dt.Columns.Count; i++)
        {
             sw.Write(r[i].ToString());
             sw.Write(",");
        }

        sw.WriteLine();
}
sw.Close();
0 голосов
/ 21 сентября 2011

Вам лучше всего использовать сериализацию.Я бы создал структурированный объект, используя шаблон проектирования Active Record .

Затем я бы вывел этот объект с использованием XML-сериализации в объект XML.Затем я сохранил бы этот XML на диск, а затем десериализовал бы его и использовал бы, как будто ничего не произошло.

См .: Как сериализовать и использовать объект XML в C # на MSDN .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...