2012-07-24 4 views
2
ALTER PROCEDURE InsertHash 
    @FileName varchar(max), 
    @Hash varchar(max) 
AS 
UPDATE tabletest 
SET deneme1 = @Hash, deneme2 [email protected] 

이 내 저장 프로 시저, 그리고 내가SQL에서 테이블을 업데이트

while (rdr.Read()) 
{ 
    string filename = @"\\" + rdr.GetString(3); 
    filename = System.IO.Path.Combine(filename, rdr.GetString(2)); 
    filename = System.IO.Path.Combine(filename, rdr.GetString(1)); 
    computeHashh1 abc = new computeHashh1(); 
    Console.WriteLine(abc.computeHash(filename)); 
    SqlCommand myCommand2 = new SqlCommand("InsertHash", myConnection); 
    myCommand2.CommandType = CommandType.StoredProcedure; 
    SqlParameter param = new SqlParameter("@FileName", filename); 
    myCommand2.Parameters.Add(param); 
    SqlParameter param2 = new SqlParameter("@Hash", abc.computeHash(filename)); 
    myCommand2.Parameters.Add(param2); 
} 

내가 코드를 실행하면 그 테이블을 갱신하지, 무엇이 문제, 같은 나쁜에 대한 sory이 될 수있는 몇 가지 데이터를 전송 SQL로 질문 메신저가 아주 새로운

+0

오류가 있습니까? – Madhivanan

+1

주의! 얼마나 많은 레코드가 해당 테이블에 있어야합니까? where 절이없는 저장 프로시 저는 모든 것을 업데이트합니다. – Steve

+0

전체 C# 코드를 배치하십시오 ... – levi

답변

6

당신이 myCommand2이 함께하지을 한 것은 ... 그것을 실행합니다

myCommand2.ExecuteNonQuery(); 

아니라, 실제로 당신은 너무 그것을 폐기해야 ...

while (rdr.Read()) 
{ 
    // ... blah 
    using(var myCommand2 = new SqlCommand("InsertHash", myConnection)) 
    { 
     // setup parameters etc 
     myCommand2.ExecuteNonQuery(); 
    } 
} 

또는 그 ... 일부 "단정"사랑 너무 많은 작업을 것 같다 경우

:

myConnection.Execute("InsertHash", new { 
     FileName = filename, 
     Hash = abc.computeHash(filename) 
    }, commandType: CommandType.StoredProcedure); 
+0

나는이 오류와 관련이 있습니다 : 이미 열린 DataReader가 이것과 관련되어 있습니다 먼저 닫아야하는 명령. – tipi

+0

@tipi 예, 일반적으로 (MARS가 활성화되지 않은 경우) 리더가 열려있는 동안 다른 명령을 실행할 수 없습니다. 이는 대개 데이터를 먼저 버퍼링하는 것을 의미합니다. 예를 들어 모든 데이터를 * list *로 읽은 다음 목록을 열거합니다 (이제 독자는 닫힙니다). N + 1에주의하십시오. –

3

는 명령을 실행하지 않은 :

myCommand2.ExecuteNonQuery() 
관련 문제