2013-08-23 90 views
0

我要对数据库逻辑从应用一个分开的,所以我写了一个函数添加记录:如何创建一个函数添加记录到数据库

public static bool AddRecordToDB(string tableName,Hashtable ht) 
     { 
      try 
      { 
       using (SqlConnection conn = CreateSqlConnection()) 
       { 
        SqlDataAdapter sda = new SqlDataAdapter("Select * from " + tableName + "where 0=1;", conn); 
        DataSet ds = new DataSet(); 
        sda.Fill(ds, tableName); 

        //Create new record 
        DataRow newRow = ds.Tables[tableName].NewRow(); 
        foreach (DictionaryEntry de in ht) 
        { 
         newRow[de.Key.ToString()] = de.Value; 
        } 

        //Add new row to dataset 
        ds.Tables[tableName].Rows.Add(newRow); 

        new SqlCommandBuilder(sda); 
        sda.Update(ds, tableName); 
       } 
      } 
      catch (Exception ex) 
      { 
       return false; 
      } 
      return true; 
     } 

,并在这里使用它

protected void btnSave_Click(object sender, EventArgs e) 
     { 
      string tableName = "TestTable"; 
      Hashtable ht = new Hashtable(); 
      ht.Add("FirstNumber", Double.Parse(txtFirstNum.Text)); 
      ht.Add("SecondNumber", Double.Parse(txtSecondNum.Text)); 
      ht.Add("Operator", DropDownListOp.SelectedValue); 
      ht.Add("Result", Double.Parse(txtResults.Text)); 

      if(SQL.AddRecordToDB(tableName,ht)) 
      {    
        Response.Write(@"<script>alert('" + Server.HtmlEncode("Save successful!") + "');document.location.href='WebForm1.aspx';</script>"); 
      } 
      else 
      { 
       Response.Write(@"<script>alert('" + Server.HtmlEncode("Save Failed!") + "');document.location.href='WebForm1.aspx';</script>"); 
      } 

     } 

问题是散列表将数据存储为对象数据类型。我想能够有一个功能,将添加记录,我传入的参数。有什么办法可以做到这一点?

+0

与HashTable相比,您是否有要添加的记录的具体类型? –

+0

该记录有4列(3列是双重类型,一列是varchar数据类型) – coffeeak

+0

它是否表示为代码中的类型实例? –

回答

0

一般来说,你应该避免这样的弱类型的方法来实现'伪解耦'。在这种情况下,我肯定会使用一个业务对象,其中包含您用DataRow填充的那四个字段。只要您的View代码直接与DAL一起工作,几乎不可能实现高级别的解耦,但无论如何,在这种情况下使用业务对象更容易出错并且类型安全。 同意在传递Object值的Hashtable以填充表时,您必须知道每列代表的数据类型,因此您不能将任意值传递给具有单个泛型方法的任意表,假定它们将匹配。也许你还应该考虑实现一个简单的MVC(模型视图控制器)模式,以便真正将GUI从数据库中分离出来。互联网上有很多这种模式的优秀例子。

相关问题