从类的属性向表中添加行

时间:2012-03-02 07:49:01

标签: database vb.net class ado.net

我有一个表示db-row表的类。它的属性是表的列。我使用以下代码在表中添加一个新行:

Public Sub AddRow(oTestRow As TestRow)
    Dim sql As String
    With oTestRow
        sql = String.Format("INSERT INTO TestTable " &
                             "(ArtNr, ArtName, ArtName2, IsVal, CLenght)  " &
                             "Values ('{0}', '{1}', '{2}', {3}, {4})",
                              .ArtNr, .ArtName, .ArtName2, .IsVal, .CLenght)
    End With
    Using oConn As New OleDbConnection(m_ConnString)
        oConn.Open()
        Using oInsertCmd As New OleDbCommand(sql, oConn)
            oInsertCmd.ExecuteNonQuery()
        End Using
    End Using
End Sub

这只是一个例子,但我的类有大约30-40个属性,这带来了一个非常大而复杂的sql字符串。 为许多类创建,编辑或维护这些sql字符串可能会产生错误。 我想知道是否存在任何紧凑的方法或方法,以便将整个对象的istance(当然属性)添加到表“TestTable”而无需编写如此大的sql字符串。 我创建了TestRow,其属性正好是表“TestTable”(具有相同名称)的列。但我没有在ADO.NET中找到任何可以使用的东西。

2 个答案:

答案 0 :(得分:1)

如果更改数据库系统是一个选项,您可能需要查看一些基于没有sql解决方案的文档,如MongoDB,CouchDB或特别是.Net RavenDB,db4o或Eloquera。

Here是其中一些列表。

答案 1 :(得分:0)

对于初学者而言,任何内联查询都是不好的做法(除非需要例如你在db中定义了表,并且没有访问db来部署过程)

你几乎没有选择 - 例如而不是手写类,使用Entitiy framework替代Linq2Sql

如果你想在这个问题中坚持使用标签,我会设计这个,充分利用OO概念。 (这是一个粗略的草图,但我希望这有帮助)

public class dbObject
   protected <type> ID --- This is important. if this has value, commit will assume update, otherwise an update will be performed

   public property DBTableName // set the table name 

   public property CommitStoredprocedure // the procedure on the database that can do commit work
   public property SelectStoredProcedure // the procedure used to retrieve the i

   public dbObject construcor (connection string or dbcontext etc)
     set dbConnection here
   end constructor

   public method commit

     reflect on this.properties available and prepare your commit string.

     if you are using storedproc ensure that you prepare named parameters and that the stored proc is defined with the same property names as your class property names. also ensure that storedproc will update if there is an ID value or insert and return a ID when the id value is not available

     Create ADO.net command and execute. (this is said easy here but you need to perfect this method)
   End method

end class

public class employee inherits dbObject
   // employee properties here
   public string name;
end employee

public class another inherits dbObject
   //another properties
   public bool isValid;
end department

用法:

employee e = new employee;
e.name = "John Smith";
e.commit(); 
console.WriteLine(e.id); // will be the id set by the commit method from the db

如果你在这里使基类正确(经过充分测试),这是自动化的,你不应该看到错误。

您需要将基类扩展为基于id从数据库中检索记录(如果您想从db实例化对象)