功能:从数据库中读取数据,选择文件夹并保存为txt,然后上传至ftp。 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Data.SqlClient; using System.IO; using System.Net; namespace DBTOTXT { public partial class Form1 : Form { public Form1() { InitializeComponent(); textBox1.Text = "D://A"+DateTime.Now.ToString().Substring(0,10)+".txt"; } public static string str = "Data Source=LENOVO-282D1;Initial Catalog=test;Integrated Security=True"; //windows认证的SQL登录。 public static SqlConnection conn = new SqlConnection(str); public static string localFilePath = ""; public static FtpWebRequest reqFTP; private void button2_Click(object sender, EventArgs e) //选择文件夹按钮 { SaveFileDialog saveFileDialog1 = new SaveFileDialog(); saveFileDialog1.Filter = "TXT文件(*.txt)|*.txt"; saveFileDialog1.Title = "保存TXT"; saveFileDialog1.FileName = "A" + dateTimePicker2.Value.ToString().Substring(0, 10); if (saveFileDialog1.ShowDialog() == DialogResult.OK) { localFilePath = saveFileDialog1.FileName.ToString(); textBox1.Text = localFilePath; } } private void button1_Click(object sender, EventArgs e) //显示DB数据按钮 { conn.Open(); string time1 = dateTimePicker1.Value.ToString().Substring(0, 10); string time2 = dateTimePicker2.Value.ToString().Substring(0, 10); string sql = "select convert(varchar(10),riqi,120),case when name='可乐'then '01' when name='雪碧' then '02' end,data from t where riqi between '" + time1 + "' and '" + time2 + "' order by riqi"; SqlCommand cmd = new SqlCommand(sql, conn); SqlDataAdapter da = new SqlDataAdapter(cmd); DataSet ds = new DataSet(); da.Fill(ds); DataTable dt = ds.Tables[0]; dataGridView1.DataSource = dt; conn.Close(); FileStream fs = new FileStream(textBox1.Text, FileMode.Append); //保存数据部分 StreamWriter sw = new StreamWriter(fs, Encoding.Default); for (int i = 0; i < dt.Rows.Count; i++) { for (int j = 0; j < dt.Columns.Count; j++) { if (j == 0) { if (i == 0) { sw.Write(dt.Rows[i][j].ToString() + " "); sw.WriteLine(); } else { if (dt.Rows[i][j].ToString() == dt.Rows[i - 1][j].ToString()) { } else { sw.Write(dt.Rows[i][j].ToString() + " "); sw.WriteLine(); } } } else { sw.Write(dt.Rows[i][j].ToString() + " "); } } sw.WriteLine(); } sw.Close(); fs.Close(); } private void Connect(String path) //连接ftp { // 根据uri创建FtpWebRequest对象 reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(path)); // 指定数据传输类型 reqFTP.UseBinary = true; // ftp用户名和密码 reqFTP.Credentials = new NetworkCredential("siege", "7743"); } private void button3_Click(object sender, EventArgs e) //上传FTP按钮 { FileInfo fileInf = new FileInfo("D://A2011.txt"); string uri = "ftp://" + "10.10.22.74" + "/" + fileInf.Name; Connect(uri);//连接 // 默认为true,连接不会被关闭 // 在一个命令之后被执行 reqFTP.KeepAlive = false; // 指定执行什么命令 reqFTP.Method = WebRequestMethods.Ftp.UploadFile; // 上传文件时通知服务器文件的大小 reqFTP.ContentLength = fileInf.Length; // 缓冲大小设置为kb int buffLength = 2048; byte[] buff = new byte[buffLength]; int contentLen; // 打开一个文件流(System.IO.FileStream) 去读上传的文件 FileStream fs = fileInf.OpenRead(); try { // 把上传的文件写入流 Stream strm = reqFTP.GetRequestStream(); // 每次读文件流的kb contentLen = fs.Read(buff, 0, buffLength); // 流内容没有结束 while (contentLen != 0) { // 把内容从file stream 写入upload stream strm.Write(buff, 0, contentLen); contentLen = fs.Read(buff, 0, buffLength); } // 关闭两个流 strm.Close(); fs.Close(); } catch (Exception ex) { MessageBox.Show(ex.Message, "Upload Error"); } } } }