2016-06-30 4 views
1

SQL Server에서 올바르게 실행되는 저장 프로 시저가 있습니다.SQL Server에서 저장 프로 시저 오류를 테스트하는 방법

나는 (R되는 최초의 행)과 같이 C#에서 호출 :

DateTime beginDate = new DateTime(2016, 5, 1); 
DateTime? endDate = new DateTime(2016, 5, 31); 

this.getDailySalesTableAdapter.Fill(myDataSet.getDailySales, beginDate, endDate); 
MessageBox.Show(rMSDataSet.getDailySales.Count.ToString()) ; //SHOWS 8549 ROWS 

MYDataSet.getDailySalesRow r = myDataSet.getDailySales.First(); 
string mb = ""; 

// error here---->>>    
foreach (DataColumn dc in r.ItemArray) 
{ 
    if (r[dc] != null) // This will check the null values also 
    { 
     mb = mb + r[dc] + " "; 
    } 

    MessageBox.Show(mb); 
} 

그것은 잘 컴파일하지만 DC에 도착 런타임 오류의 개체를 캐스팅 할 수 없습니다

입니다 유형 '선택 System.String' 'System.Data.DataColumn'는

SQL 서버에서

, 내 저장 프로 시저 시작 입력합니다 :

ALTER PROCEDURE [dbo].[getDailySales] 
    @begindate date, 
    @enddate date 
+2

을 나는 ItemArray 문자열을 가지고 말을? –

+0

에 오류가 무엇 라인 ... – mxix

+0

대신 'Nullable' DateTime을 사용합니다. 왜 기본값으로 저장 프로 시저의'enddate '= Null도 저장 프로 시저의 나머지 부분을 보게됩니다. 또한 오류는 매우 직설적입니다 .. – MethodMan

답변

1

를 사용해야합니다. foreach (DataColumn dc in r.ItemArray)이 DataColumn으로 객체를 캐스팅하려는 위치를 볼 수있는 유일한 장소이기 때문에이 결론에 도달했습니다.

r.ItemArray는 아마도 object[]입니다 (보니 https://msdn.microsoft.com/en-us/library/system.data.datarow.itemarray(v=vs.110).aspx). 따라서 모든 값을 얻고 싶다면 루프를 돌리면서 각 값을 살펴볼 수 있습니다.

다음 코드는 대략 원하는대로 수행해야한다고 생각합니다. 코멘트로부터 KonB에 적립 된 Stringbuilder 아이디어. 이 널 (null) 필드 (단지 값이 무엇인지 열에서 무엇을 해결하려고 할 때 그들을 혼동 될 수 건너 뛰는 발생하면 그것은 또한 (null)을 인쇄합니다.

var mb= new StringBuilder(); 
foreach (object dataItem in r.ItemArray) 
{ 
    if (dataItem != null) // This will check the null values also 
    { 
     mb.Append(dataItem.ToString()); 
    } 
    else 
    { 
     mb.Append("(null)");   
    } 
    mb.Append(" "); 
} 
MessageBox.Show(mb.ToString()); 
+0

맞습니다. foreach는 오류가있는 곳입니다. 나는 아직도 해결책이 무엇인지 확신하지 못한다. – Missy

+0

필자가해야 할 일을 설명하고 보여주기 위해 내 대답을 업데이트했습니다. – Chris

+0

안녕하세요 - 당신이 해냈어 !!! 고맙습니다 :) – Missy

3

당신은 내가 당신의 문제가 r.ItemArray 문자열이 아닌 DataColumn 개체가 포함되어 있다는 것을 상상 DataColumn.ColumnName 특성을

foreach (DataColumn dc in r.ItemArray) 
{ 
    if (r[dc] != null) // This will check the null values also 
    { 
     mb = mb + r[dc.ColumnName] + " "; //Updated 
    } 
    MessageBox.Show(mb); 
} 
+0

맞을 수도 있지만 문제가 해결되지 않았습니다. 방금 FOREACH 문에 버그가 수정되었습니다. – Missy

+0

'r.ItemArray'의 타입이 확실하지 않습니다. 'r.Columns'와 같이 'r'의 열에 대한 속성이 있는지 확인할 수 있습니까? –

+0

r.Columns 속성이 없습니다. MessageBox.Show (rMSDataSet.getDailySales.Count.ToString()); = 8549 거기에 기록이 있습니다. – Missy

관련 문제