我不会告诉你使用 ORM,而是向你展示我是如何做到的(从记忆中输入)(我将被降级和引火,谁知道还有什么):
我看你做我做的,即:
SqlDataReader myReader = null;
SqlCommand SQLcmd = new SqlCommand();
SqlConnection SQLConn = new SqlConnection();
String SQLStatement = "Select this 'nd That";
SQLConn.ConnectionString = SQLConnectionString;
SQLConn.Open();
SQLcmd.Connection = SQLConn;
SQLcmd.CommandText = SQLStatement;
myReader = SQLcmd.ExecuteReader();
while (myReader.Read())
{
//Do some awesome
}
SQLConn.Close();
}
所以我做了类似的事情。请注意,您正在创建新的 SqlCommand、新的 SqlConnection,并且您正在使用一个通用的 SqlConnectionString(您需要能够从中心位置重新加载它,是吗?)所以我这样做:
public class Global{
public string ConnectionString {get;set;}
public Global(){
ConnectionString = //load from wherever, this allows me to reload it later, via API? ;)
}
public SqlCommandFactory(string sprocName, SqlConnection con){
return new SqlCommand{
CommandText = sprocName,
Connection = con,
CommandTimeout = 0,
ConnectionTimeout = 0,
CommandType = StoredProcedure
};
}
}
//in my other class that uses this code:
public List<string> /* for simplicity sake, strigns */ GetListOfStringsFromDatabase(){
List<string> returnValue = new List<string>();
// use of using ensures that I don't forget to clean something up here!!!!
using ( SqlConnection con = new SqlConnection(Global.ConnectionString) ) {
SqlCommand cmd = Global.SqlCommandFactory("mysproc", con);
cmd.Parameters.Add( "@param1", SqlDbType.VarChar ).Value = "somestring";
con.Open();
using ( SqlDataReader reader = cmd.ExecuteReader() ) {
while (reader.Read()) {
returnResult.Add( reader[0].ToString() );
}
}
}
return returnValue;
}
但是 ORM 可能会更好。只是我们觉得不适合我们的情况。