2013-06-10 5 views
-2

저장 프로 시저를 호출하는 C# 코드를 통해 SQL 테이블에 행을 삽입하고 있습니다.저장 프로 시저의 SQL 오류

C# 코드 :

SqlCommand myCommand = thisConnection.CreateCommand(); 
       myCommand.CommandText = "FederationUpdateCTRAndImpressionCountsForAllYPIds"; 
       myCommand.CommandType = CommandType.StoredProcedure; 
       myCommand.Parameters.Add("@bid", SqlDbType.UniqueIdentifier); 
       myCommand.Parameters.Add("@uid", SqlDbType.UniqueIdentifier); 
       myCommand.Parameters.Add("@imp", SqlDbType.VarChar); 
       myCommand.Parameters.Add("@ctr", SqlDbType.VarChar); 

       while (myfederationReader.Read()) 
       {      
        myCommand.Parameters["@bid"].Value = myfederationReader["BusinessId"]; 
        myCommand.Parameters["@uid"].Value = myfederationReader["UId"]; 
        myCommand.Parameters["@imp"].Value = myfederationReader["Impression"]; 
        myCommand.Parameters["@ctr"].Value = myfederationReader["CTR"];      
        rowsAffected = myCommand.ExecuteNonQuery();       
       } 

저장된 프로 시저 :

그것을 실행에
CREATE PROCEDURE [dbo].[FederationUpdateCTRAndImpressionCountsForAllYPIds] 
    @bid uniqueidentifier, 
    @uid uniqueidentifier, 
    @imp varchar(255), 
    @ctr varchar(255) 
AS BEGIN 
    UPDATE BasicBusinessInformation 
    SET  BasicBusinessInformation.CTR = @ctr , BasicBusinessInformation.Impression = @imp 
    WHERE BasicBusinessInformation.BusinessId = @bid AND BasicBusinessInformation.UId = @uid 
    END 

, 다음과 같은 오류가보고됩니다

절차는 매개 변수가없는 및 ​​인수가 제공되었다

+0

http://stackoverflow.com/questions/13230126/procedure-insertserial처럼이 명령 을 발사하기 전에 독자로부터 데이터를 가져 오기 위해 시도 parametres -has-no-parameters-and-arguments-were-supplied- – Andrew

+0

은'thisConnection'이 당신이 DataReader'myfederationReader'를 위해 사용하고있는 것과 동일한 연결입니까? 귀하의 프로 시저가 귀하의 리더 소스와 동일한 데이터베이스에 있습니까? Enterprise Manager에서 프로 시저를 확장하면 매개 변수가 표시됩니까? – dash

+2

매개 변수가없는 다른 스키마, 특히 기본 스키마에 'FederationUpdateCTRAndImpressionCountsForAllYPIds'라는 또 다른 프로 시저가 있습니까? SqlCommand에서 프로 시저 이름을 스키마 한정하면 어떻게됩니까? – GarethD

답변

2

봅니다

[C#] 
public bool ExportAndClear() { 
SqlParameter[] myParamArray = new SqlParameter[myCmd.Parameters.Count - 1]; 
myCmd.Parameters.CopyTo(myParamArray, 0); 
myCmd.Parameters.Clear(); 
return true; 
} 
-3

시도가 다른 결과를 얻을 수 있는지, while 루프에서 다음

 
SqlCommand myCommand = thisConnection.CreateCommand(); 
       myCommand.CommandText = "FederationUpdateCTRAndImpressionCountsForAllYPIds"; 
       myCommand.CommandType = CommandType.StoredProcedure; 
       myCommand.Parameters.Add("@bid", SqlDbType.UniqueIdentifier); 
       myCommand.Parameters.Add("@uid", SqlDbType.UniqueIdentifier); 
       myCommand.Parameters.Add("@imp", SqlDbType.VarChar); 
       myCommand.Parameters.Add("@ctr", SqlDbType.VarChar); 

이동. 명령을 취소

+1

무엇이 바뀌 었습니까? – Spandan

+0

나는 아무것도 바꾸지 않았다. while 루프 내에서 매개 변수 추가를 이동하도록 제안했습니다. 이렇게하면 매번 명령이 만들어지며 매개 변수도 만들어집니다. – Mez

+0

왜 downvote? 주석을 읽으면 while 루프에서 코드 스 니펫을 강조 표시하는 것이 좋습니다. – Mez

0

당신이

1)Fetch data from reader and store in list or datatable 
2)For loop on list or datatable 
3)in for loop fire this command