我有以下两种方法:
internal static SqlDataReader SelectData(string sql)
{
using (var sqlConnection = new SqlConnection(Constant.ConnectionString))
{
sqlConnection.Open();
var sqlCommand = new SqlCommand(sql, sqlConnection);
var dataReader = sqlCommand.ExecuteReader();
return dataReader;
}
}
============
并将此方法用作:
var dataReader = SelectData(---some sql ---);
private void AddData(dataReader)
{
while (dataReader.Read())
{
Employee e = new Employee();
e.FirstNamei = dataReader["Name"].ToString();
}
dataReader.Close();
}
我知道我们可以合并这两种方法,但是我正在寻找更好的方法来编写此方法,否则可能会引起一些问题?
实际上,您实际上让自己显得有些开放。您真的想这样写:
using (SqlConnection cnn = new SqlConnection(cnnString))
using (SqlCommand cmd = new SqlCommand(sql, cnn))
{
// use parameters in your SQL statement too, so you can do this
// and protect yourself from SQL injection, so for example
// SELECT * FROM table WHERE field1 = @parm1
cmd.Parameters.AddWithValue("@parm1", val1);
cnn.Open();
using (SqlDataReader r = cmd.ExecuteReader())
{
}
}
因为您需要确保将这些对象丢弃。此外,按照这个方向,您就不需要dataReader.Close()
。using
语句自动处置它时,它将被调用。
现在,将语句集合包装在a中try...catch
,您就可以从事业务了。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句