2009-08-21 3 views
0

내가 시도한 것은 C#을 사용하여 ASP.Net에서 텍스트 파일을 생성하는 것입니다. 데이터는 저장 프로 시저를 실행하여 데이터베이스에서 검색됩니다. 저장 프로 시저가 SQL Server Mangement Studio에서 실행하여 값을 반환했는지 확인했습니다. 나는 실제로 그것을 할 수있었습니다.일부 저장 프로 시저가 ASP.Net에서 데이터를 반환하지 않는 이유 C#

먼저 모든 관련 테이블을 뷰에 저장 한 다음 저장 프로 시저를 사용하여 해당 뷰에서 데이터를 가져옵니다. 그런 다음 해당 데이터를 ASP.Net의 텍스트 파일로 생성하십시오.

SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["Name"].ConnectionString); 
conn.Open(); 
SqlCommand cmd = new SqlCommand("Stored Procedure Name", conn); 
cmd.CommandType = CommandType.StoredProcedure; 
SqlDataAdapter myAdapter = new SqlDataAdapter(cmd);   
DataTable dt = new DataTable(); 
myAdapter.Fill(dt);   
System.Text.StringBuilder strResult = new System.Text.StringBuilder(""); 
string createtext = (Server.MapPath("./Feeds/") + "feed.txt"); 
StreamWriter w = File.CreateText(createtext); 
w.Flush(); 
w.Close(); 

(SQL Server Management Studio에서) 모든보기가 값을 반환하도록했습니다.

그러나 문제는 모든 저장 프로 시저가 ASP.Net에서 값을 반환하지 않는다는 것입니다. 모든 저장 프로 시저가 SQL Server Management Studio에서 일부 값을 반환했지만 빈 텍스트 파일 만 가져옵니다.

나는 단지이 쿼리는 (일부 저장 프로 시저) ASP.Net을 관리 Studio에서 일부 값을 반환하지만

select Somthing 
from View_Name 

같은 저장 프로 시저에서 간단한 SELECT 문을 사용합니다.

이 문제의 문제점은 무엇입니까? 제발 도와주세요

+0

거기에 실제로 dt가 파일과 관련이 있습니까? – Yuliy

답변

3

DataTable에서 데이터를 가져 와서 텍스트 파일에 넣는 위치가 표시되지 않습니다.

편집 :

당신이 코멘트에 코드를 표시했기 때문에

: 당신이 당신의 예외를 삼키는 나타납니다

합니다. 간결함을 위해 코드를 그냥 남겨 두었다면 예외가 아니라면 catch 문에 오류를 숨길 수 있습니다.

예를 들어 SP 또는보기에서 사용 권한 문제가있을 수 있으며이를 모를 수 있습니다.

그렇지 않은 경우 : 이 코드에 대한 중단 점을 디버깅/추가하여 데이터 테이블에 데이터가 있는지 확인하십시오.

SQL 프로파일 러를 사용하여 코드에서 SQL Server에 무엇이 들어가는지 볼 수도 있습니다.

+0

DataTable의 데이터를 파일에 복사해야합니다. 이것은 일어나지 않습니다. –

+0

죄송합니다. 코드의 일부를 입력하지 않았습니다. 여기서 데이터 테이블의 데이터를 가져 와서 텍스트 파일에 넣습니다. { foreach (dt.Rows의 DataRow dr) { for (int col = 0; col

+0

이 코드에 대한 중단 점을 디버깅/추가하여 데이터 테이블에 데이터가 있는지 확인 했습니까? 예외 (코드 스 니펫에서 보이는 것과 같은 종류)를 삼키고 있습니까? 예를 들어, 해당 SP 및/또는보기 중 일부에 대한 사용 권한 문제가있을 수 있습니다. SQL 프로파일 러를 사용하여 코드에서 SQL Server로 무엇이 전달되는지 확인할 수도 있습니다. – klabranche

2

데이터베이스에서 검색 한 데이터를 사용하고 있지 않다는 명백한 사실 외에도 예외가 발생하면 코드가 누출 될 수 있습니다. 것을 방지하기 위해 다음과 같이 기록한다 :

using (SqlConnection conn = new SqlConnection(
     ConfigurationManager.ConnectionStrings["Name"].ConnectionString)) 
{ 
    conn.Open(); 
    using (SqlCommand cmd = new SqlCommand("Stored Procedure Name", conn)) 
    { 
     cmd.CommandType = CommandType.StoredProcedure; 
     using (SqlDataAdapter myAdapter = new SqlDataAdapter(cmd)) 
     { 
      using (DataTable dt = new DataTable()) 
      { 
       myAdapter.Fill(dt); 
      } 
     } 
    } 
} 

System.Text.StringBuilder strResult = new System.Text.StringBuilder(""); 
string createtext = (Server.MapPath("./Feeds/") + "feed.txt"); 
using (StreamWriter w = File.CreateText(createtext)) 
{ 
    // Do something with w 
    w.Flush(); 
} 
+0

보다 안전한 코드 버전 John에게 감사드립니다. 분명히 나는 ​​배울 것이 많다. –

0

당신이 디버깅 적이/DataTable에 데이터가있는 경우이 코드가 볼 수 있도록 중단 점을 추가? 예외 (코드 스 니펫에서 보이는 것과 같은 종류)를 삼키고 있습니까? 예를 들어, 해당 SP 및/또는보기 중 일부에 대한 사용 권한 문제가있을 수 있습니다. 또한 SQL 프로파일 러를 사용하여 코드에서 SQL Server로 무엇이 전달되는지 확인할 수 있습니다.

감사합니다. 나는 돌아가서 실제로 내가 사용했던 견해를 보았다. 앞에서 언급했듯이 일부 절차는 텍스트 파일에 데이터를 반환하고 일부는 처리하지 않을 것입니다.

내 경우에는 사용자 정의 함수와 관련된보기에서 데이터를 검색하는 저장 프로 시저가 빈 파일을 반환하는 것처럼 보였습니다. (제가 직면 한 문제) 그리고이 특정 저장 프로 시저의 경우; 이 코드 다음에 데이터 테이블이 비어있었습니다. myAdapter.Fill (dt); 왜 내가 빈 텍스트를 얻었는지 설명했다.

또한 ASP.Net에서 "Generate Text"버튼을 클릭하면 SQL 프로파일 러를 살펴 보았지만 저장 프로 시저가 실행되었습니다. 그러나 반환 된 데이터가 없습니다.

UDF로 인해 문제가 발생할 수 있습니다. 문제가 어떻게 든 UDF 권한과 관련이 있습니까? 허가가 문제의 원인 일 수 있다고 생각합니다. UDF가 포함 된 저장 프로 시저에서 데이터를 가져올 수 있도록 ASP.Net에 권한을 부여하려면 어떻게해야합니까?

참고 : UDF는 다른 개발자가 작성합니다.

감사합니다. Aein

관련 문제