2012-07-24 47 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()