2012-07-24 48 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); 
} 

它沒有更新表,當我運行的代碼,什麼都可以的問題,索裏這麼差問題IM相當新的sql

+0

你得到任何錯誤? – Madhivanan 2012-07-24 08:44:04

+1

小心!該表中應該有多少條記錄?沒有where子句的存儲過程將更新所有內容。 – Steve 2012-07-24 08:46:06

+0

地方整個C#代碼... – levi 2012-07-24 08:47:33

回答

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 2012-07-24 10:23:59

+0

@tipi是的,通常(除非啓用了MARS),當閱讀器打開時,您不能執行另一個命令。這通常意味着首先緩衝數據,例如:將所有數據讀入* list *,然後枚舉列表(現在讀者關閉)做其他事情。不過,要小心N + 1 – 2012-07-24 12:05:40

3

您沒有執行命令:

myCommand2.ExecuteNonQuery()