下面是一个调用Hashtable通过事务来执行多条SQL语句一个方法.
/// <summary>
/// 执行多条SQL语句,实现数据库事务。
/// </summary>
/// <param name="SQLStringList">SQL语句的哈希表(key为sql语句,value是该语句的SqlParameter[])</param>
    public  void ExecuteSqlTran(Hashtable SQLStringList)
      {
using (SqlConnection conn = new SqlConnection(connectionString))
  {
    conn.Open();
    using (SqlTransaction trans = conn.BeginTransaction())
      {
SqlCommand cmd = new SqlCommand();
   try
     {
//循环
foreach (DictionaryEntry myDE in SQLStringList)
 {
  string cmdText = myDE.Key.ToString();
  SqlParameter[] cmdParms = (SqlParameter[])myDE.Value;
  PrepareCommand(cmd, conn, trans, cmdText, cmdParms);
  int val = cmd.ExecuteNonQuery();
  cmd.Parameters.Clear();   trans.Commit();
       }
    conn.Close();
}
      catch
{
  conn.Close();
  trans.Rollback();
  throw;
}
     }
 }
    }我现在有这样二个SQL语句如下,我不知道怎么引用。
string strsql1 = "Insert into A(Rkey,Code,Name) Values('1','Cohen',@Name)";
string strsql2 = "Update A Set Code = @Code Where Rkey = '1'";这样引用提示有错误,请问错误在那里。到底怎么引用,请高人指点.小人先谢了!
 private void btnHash_Click(object sender, System.EventArgs e)//引用dbhelp类的ExecuteSqlTran的事件。
   {
       string strsql1 = "Insert into A(Rkey,Code,Name) Values('1','Cohen',@Name)";
       string strsql2 = "Update A Set Code = @Code Where Rkey = '1'";
       Hashtable ht = new Hashtable();
       ht.Add(strsql1,"Backham");
       ht.Add(strsql2,"Owen");
       dbhelp.ExecuteSqlTran(ht);   //dbhelp类实化,ExecuteSqlTran是类dbhelp一种方法.
    }

解决方案 »

  1.   

    key可以有空格吗?采用数组存放到HashTable中比较好e.g.
    array  arr;
    arr[0] = strsql1;
    arr[1] = parameter;hashTable.add("key", arr);
      

  2.   

        Hashtable   ht   =   new   Hashtable();
                  ht.Add(strsql1, "Backham ");
                  ht.Add(strsql2, "Owen ");
                  dbhelp.ExecuteSqlTran(ht);       //dbhelp类实化,ExecuteSqlTran是类dbhelp一种方法.
    ----------------------------------
    ExecuteSqlTran(ht)中的ht的key保存的是SQL语句或者存储过程名称,value里保存的是SQL参数
    所以          ht.Add(strsql1, "Backham ");应该是一个SqlParameter[]集合;你需要先创建该集合
                        SqlParameter p = new SqlParameter("@Name",SqlDbType.NvarChar,50);
                        p.Value = "Backham"; 
    SqlParameter[] sps=new SqlParamerer[0]{
                        p
                   }
              ht.Add(strsql1, sps);