不是告訴你使用ORM的,我要告訴你我是如何做到這一點(從內存類型)(我將要downmodded和flamebaited,誰知道還有什麼):
我看你做什麼我做什麼,這是即:
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可能會更好。只是不是我們覺得適合我們的情況。
是的,LINQ2SQL或實體框架。首先擊中谷歌應該讓你開始。 – 2010-10-14 14:56:47
該代碼可以很容易地進行DRYD,因此您只需編寫一次即可。但正如其他人所說的那樣,現在流行的選擇是EF。 – bzlm 2010-10-14 15:54:45
你有沒有成功解決這個問題?你還需要幫助嗎? – jcolebrand 2010-12-14 04:26:50