2016-08-05 2 views
1

aspx에서 저장 프로 시저를 호출하여 파일을 내보내려고하고 데이터를 .txt 파일에 저장하고 싶습니다. 각 열은 설정해야하는 특정 열 길이가 있어야합니다. 아래 코드는,하지만 프로그램을 실행할 때 출력 열 이름 만 표시 ... 및 데이터가 나타납니다. 행 문을 읽지 않는 프로그램처럼 보입니다. 제발 도와주세요aspx를 사용하여 저장 프로 시저에서 txt 파일로 데이터 내보내기

protected void Page_Load(object sender, EventArgs e) 
{ 
    Cursor.Current = Cursors.WaitCursor; 

    string str = "Server=KABS;Database=HOT;uid=sa;pwd=DDD;Connection Timeout=6000"; 

    if (Request.QueryString["ProcessName"] != null) 
    { 
      using (SqlConnection con = new SqlConnection(str)) 
      { 
       if (Request.QueryString["ProcessName"].ToString().Equals("Ebill")) 
       { 
        using (SqlCommand cmd = new SqlCommand("AR_Ebill_claim", con)) 
        { 
         cmd.CommandType = CommandType.StoredProcedure; 

         string compcode = null; 
         DateTime dateFrom = DateTime.Now; 
         DateTime dateTo = DateTime.Now; 
         string episType = null; 
         string debtorCode = null; 

         if (Request.QueryString["compcode"] != null) 
         { 
          if (string.IsNullOrEmpty(Convert.ToString(Request.QueryString["compcode"]))) 
          { 
           compcode = null; 
          } 
          else 
          { 
           compcode = Convert.ToString(Request.QueryString["compcode"]); 
          } 
         } 
         if (Request.QueryString["dateFrom"] != null) 
         { 
          DateTime dtFrom = DateTime.Parse(Request.QueryString["dateFrom"]); 
          dtFrom.ToString("dd-MMM-yyyy"); 

          if (dtFrom == null) 
          { 
           dateFrom = DateTime.Now; 
          } 
          else 
          { 
           dateFrom = dtFrom; 
          } 
         } 
         if (Request.QueryString["dateTo"] != null) 
         { 
          DateTime dtTo = DateTime.Parse(Request.QueryString["dateTo"]); 
          dtTo.ToString("dd-MMM-yyyy"); 

          if (dtTo == null) 
          { 
           dateTo = DateTime.Now; 
          } 
          else 
          { 
           dateTo = dtTo; 
          } 
         } 
         if (Request.QueryString["episType"] != null) 
         { 
          if (string.IsNullOrEmpty(Convert.ToString(Request.QueryString["episType"]))) 
          { 
           episType = null; 
          } 
          else 
          { 
           episType = Convert.ToString(Request.QueryString["episType"]); 
          } 
         } 
         if (Request.QueryString["debtorCode"] != null) 
         { 
          if (string.IsNullOrEmpty(Convert.ToString(Request.QueryString["debtorCode"]))) 
          { 
           debtorCode = null; 
          } 
          else 
          { 
           debtorCode = Convert.ToString(Request.QueryString["debtorCode"]); 
          } 
         } 
         cmd.Parameters.Add("@compcode", SqlDbType.VarChar, 100); 
         cmd.Parameters["@compcode"].Value = compcode; 

         cmd.Parameters.Add("@dateFrom", SqlDbType.SmallDateTime); 
         cmd.Parameters["@dateFrom"].Value = dateFrom; 

         cmd.Parameters.Add("@dateTo", SqlDbType.SmallDateTime); 
         cmd.Parameters["@dateTo"].Value = dateTo; 

         cmd.Parameters.Add("@episType", SqlDbType.VarChar, 40); 
         cmd.Parameters["@episType"].Value = episType; 

         cmd.Parameters.Add("@debtorCode", SqlDbType.VarChar, 100); 
         cmd.Parameters["@debtorCode"].Value = debtorCode; 

         con.Open(); 
         //cmd.ExecuteNonQuery(); 

         //gdBill.EmptyDataText = "No Records Found"; 
         //gdBill.DataSource = cmd.ExecuteReader(); 
         //gdBill.DataBind(); 

         SqlDataAdapter da = new SqlDataAdapter(); 
         DataTable dt = new DataTable(); 


         da.SelectCommand = cmd; 
         da.Fill(dt); 

         string txt = string.Empty; 

         if (dt.Columns.Count > 0) 
         { 
          foreach (DataColumn column in dt.Columns) 
          { 
           //Add the Header row for Text file. 
           txt += column.ColumnName + "\t\t"; 
          } 

         } 

         //Add new line. 
         txt += "\r\n"; 

         if (dt.Rows.Count > 0) 
         { 
          foreach (DataRow row in dt.Rows) 
          { 
           foreach (DataColumn column in dt.Columns) 
           { 
            //Add the Data rows. 
            txt += row[column.ColumnName].ToString() + "\t\t"; 
           } 

           //Add new line. 
           txt += "\r\n"; 
          } 
         } 


         Response.Clear(); 
         Response.Buffer = true; 
         Response.AddHeader("content-disposition", "attachment;filename=E-Billing.txt"); 
         Response.Charset = ""; 
         Response.ContentType = "application/text"; 
         Response.Output.Write(txt); 
         Response.Flush(); 
         Response.End(); 

         Cursor.Current = Cursors.AppStarting; 

        } 

       } 
       //cmd.Dispose(); 
       con.Close(); 
      } 
    } 
} 
+0

아래에있는 내 코드와 솔루션'dt' 저장 프로 시저에 의해 채워지고가있어? –

답변

0

나는 당신의 코드를 테스트했고 꼭 작동해야합니다. 문제는 저장 프로 시저 AR_Ebill_claim이 0 행을 반환한다는 것입니다. 그러나 오류가 없으므로 열 이름이 내보내집니다.

나는 문제가 매개 변수에 있다고 생각한다. SQL Server Studio 또는 유사한 프로그램에서 원하는 결과를 저장 프로 시저에 제공하는지 먼저 테스트하고 테스트하십시오.

0

내가 이미 :)

if (Request.QueryString["ProcessName"].ToString().Equals("Ebill")) 
       { 
        using (SqlCommand cmd = new SqlCommand("AR_Ebill_claim", con)) 
        { 
         cmd.CommandType = CommandType.StoredProcedure; 

         string compcode = null; 
         DateTime dateFrom = DateTime.Now; 
         DateTime dateTo = DateTime.Now; 
         string episType = null; 
         string debtorCode = null; 

         if (Request.QueryString["compcode"] != null) 
         { 
          if (string.IsNullOrEmpty(Convert.ToString(Request.QueryString["compcode"]))) 
          { 
           compcode = null; 
          } 
          else 
          { 
           compcode = Convert.ToString(Request.QueryString["compcode"]); 
          } 
         } 
         if (Request.QueryString["dateFrom"] != null) 
         { 
          DateTime dtFrom = DateTime.Parse(Request.QueryString["dateFrom"]); 
          dtFrom.ToString("dd-MMM-yyyy"); 

          if (dtFrom == null) 
          { 
           dateFrom = DateTime.Now; 
          } 
          else 
          { 
           dateFrom = dtFrom; 
          } 
         } 
         if (Request.QueryString["dateTo"] != null) 
         { 
          DateTime dtTo = DateTime.Parse(Request.QueryString["dateTo"]); 
          dtTo.ToString("dd-MMM-yyyy"); 

          if (dtTo == null) 
          { 
           dateTo = DateTime.Now; 
          } 
          else 
          { 
           dateTo = dtTo; 
          } 
         } 
         if (Request.QueryString["episType"] != null) 
         { 
          if (string.IsNullOrEmpty(Convert.ToString(Request.QueryString["episType"]))) 
          { 
           episType = null; 
          } 
          else 
          { 
           episType = Convert.ToString(Request.QueryString["episType"]); 
          } 
         } 
         if (Request.QueryString["debtorCode"] != null) 
         { 
          if (string.IsNullOrEmpty(Convert.ToString(Request.QueryString["debtorCode"]))) 
          { 
           debtorCode = null; 
          } 
          else 
          { 
           debtorCode = Convert.ToString(Request.QueryString["debtorCode"]); 
          } 
         } 
         cmd.Parameters.Add("@compcode", SqlDbType.VarChar, 100); 
         cmd.Parameters["@compcode"].Value = compcode; 

         cmd.Parameters.Add("@dateFrom", SqlDbType.SmallDateTime); 
         cmd.Parameters["@dateFrom"].Value = dateFrom; 

         cmd.Parameters.Add("@dateTo", SqlDbType.SmallDateTime); 
         cmd.Parameters["@dateTo"].Value = dateTo; 

         cmd.Parameters.Add("@episType", SqlDbType.VarChar, 40); 
         cmd.Parameters["@episType"].Value = episType; 

         cmd.Parameters.Add("@debtorCode", SqlDbType.VarChar, 100); 
         cmd.Parameters["@debtorCode"].Value = debtorCode; 

         con.Open(); 
         //cmd.ExecuteNonQuery(); 

         //gdBill.EmptyDataText = "No Records Found"; 
         //gdBill.DataSource = cmd.ExecuteReader(); 
         //gdBill.DataBind(); 

         string outputFilePath = Server.MapPath("~/Documents/EClaim.txt"); 

         if (File.Exists("~/Documents/EClaim.txt")) 
         { 
          File.Delete("~/Documents/EClaim.txt"); 

         } 

         SqlDataAdapter da = new SqlDataAdapter(); 
         DataTable dt = new DataTable(); 

         da.SelectCommand = cmd; 
         da.Fill(dt); 

         int[] maxLengths = new int[dt.Columns.Count]; 

         for (int i = 0; i < dt.Columns.Count; i++) 
         { 
          maxLengths[i] = dt.Columns[i].ColumnName.Length; 

          foreach (DataRow row in dt.Rows) 
          { 
           if (!row.IsNull(i)) 
           { 
            int length = row[i].ToString().Length; 

            if (length > maxLengths[i]) 
            { 
             maxLengths[i] = length; 
            } 
           } 
          } 
         } 

         using (StreamWriter sw = new StreamWriter(outputFilePath, false)) 
         { 
          //for (int i = 0; i < dt.Columns.Count; i++) 
          //{ 
          // sw.Write(dt.Columns[i].ColumnName.PadRight(maxLengths[i] + 2)); 
          //} 

          sw.WriteLine(); 

          foreach (DataRow row in dt.Rows) 
          { 
           for (int i = 0; i < dt.Columns.Count; i++) 
           { 
            if (!row.IsNull(i)) 
            { 
             sw.Write(row[i].ToString().PadRight(maxLengths[i] + 1)); 
            } 
            else 
            { 
             sw.Write(new string(' ', maxLengths[i] + 1)); 
            } 
           } 

           sw.WriteLine(); 
          } 

          sw.Close(); 
         } 

         //string filePath = "~/Documents/EBilling.txt"; 
         //Response.ContentType = "application/text"; 
         //Response.AddHeader("Content-Disposition", "attachment;filename=\"" + filePath + "\""); 
         //Response.TransmitFile(Server.MapPath(filePath)); 
         ////Response.End();       
        } 
+0

아마도이 문제를 해결할 수있는 방법을 설명 할 수 있습니다. 해결책이 무엇인지는 분명하지 않습니다. –