我有一个表示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中找到任何可以使用的东西。
答案 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实例化对象)