私はADO.NETヘルパーユーティリティクラスを探して、ADO.NETデータソースを照会できるようにしています。あまりにも派手なものを探しているわけではありませんが、トランザクションをサポートする必要があります。そこに何かありますか?まともなADO.NETヘルパーのユーティリティはありますか?
P.S.私はデータアクセスブロックがそれを行うことは知っていますが、私は他のコンポーネントとは少し独立したものを探していました。単純なライブラリや何かのように
私はADO.NETヘルパーユーティリティクラスを探して、ADO.NETデータソースを照会できるようにしています。あまりにも派手なものを探しているわけではありませんが、トランザクションをサポートする必要があります。そこに何かありますか?まともなADO.NETヘルパーのユーティリティはありますか?
P.S.私はデータアクセスブロックがそれを行うことは知っていますが、私は他のコンポーネントとは少し独立したものを探していました。単純なライブラリや何かのように
ちょうど軽いラッパーの場合は、自分でコマンドをラップしてみませんか?
例:
/// <summary>
/// Executes a stored procedure or query, returns the number of rows effected.
/// </summary>
/// <param name="commandText"></param>
/// <param name="commandType"></param>
/// <param name="sqlParameters"></param>
/// <param name="sqlTransaction"></param>
/// <returns></returns>
public static int ExecuteQuery(string commandText, CommandType commandType, List<SqlParameter> sqlParameters, SqlTransaction sqlTransaction)
{
if (sqlTransaction == null)
{
using (SqlConnection sqlConnection = new SqlConnection(GetConnectionString()))
{
sqlConnection.Open();
using (SqlCommand sqlCommand = sqlConnection.CreateCommand())
{
sqlCommand.CommandType = commandType;
sqlCommand.CommandText = commandText;
if (sqlParameters != null)
{
foreach (SqlParameter sqlParameter in sqlParameters)
{
sqlCommand.Parameters.Add(sqlParameter);
}
}
return sqlCommand.ExecuteNonQuery();
}
}
}
else
{
SqlCommand sqlCommand = new SqlCommand(commandText, sqlTransaction.Connection, sqlTransaction);
sqlCommand.CommandType = commandType;
foreach (SqlParameter sqlParameter in sqlParameters)
{
sqlCommand.Parameters.Add(sqlParameter);
}
return sqlCommand.ExecuteNonQuery();
}
}
あなたの定義は「何もない」と「シンプル」に依存しますが、BLToolkitは手作業で書くことを望まない定型的なADO.NETコードを抽象化している。例えば、
public abstract class PersonAccessor : DataAccessor<Person>
{
[SqlQuery("SELECT * FROM Person WHERE PersonID = @id")]
public abstract Person GetPersonByID(int @id);
}
Person person = DataAccessor.CreateInstance<PersonAccessor>.
GetPersonByID(2);
だけでDBからPerson
オブジェクトを取得します - それを参照してください? - 5-6行のコード。 DataSet
Sについては
、どのようhere's:
using (DbManager db = new DbManager())
{
DataSet ds = db
.SetCommand("SELECT * FROM Person")
.ExecuteDataSet();
Assert.AreNotEqual(0, ds.Tables[0].Rows.Count);
}
追加パラメータがDbManager
上のメソッドを呼び出すのと同じくらい簡単です。
あなたはORMを本当に恐れてはいけません。
これは私が考えている何という手の込んだです。私はsomething.CommandType =テキストを行うことができるようにしたいと思います。 command.AddInParameter( "foo"、value); command.CommandText = "Select * From SomeTable"; helper.GetDataset(command、connectionString); これだけ簡単なものは何ですか?基本的にはstd ado.netのオブジェクトとメソッドの上に非常に非常に軽いラッパーです – Yannis
明確化:私はdbからデータセットを取得するために気をつけます。私はormを気にしません - 実際にはそれをしたくないです – Yannis
私はormsを恐れていません.....私は実際にそれらをかなり重く使用します。この特定のシナリオでは、ORMは十分ではありません。ありがとう – Yannis
public class ADOUtility
{
private string _connectionstring;
private SqlConnection DbConn;
private bool DBStatus;
public int CmdTimeOut;
public string ConnectionString
{
set { _connectionstring = value; }
}
public ADOUtility(string connstr)
{
_connectionstring = connstr;
CmdTimeOut = -1;
DBStatus = false;
}
public ADOUtility()
{
DBStatus = false;
CmdTimeOut = -1;
}
/// <summary>Create and opens a new connection </summary>
public void Open()
{
try
{
DbConn = new SqlConnection();
DbConn.ConnectionString = _connectionstring;
DbConn.Open();
DBStatus = true;
}
catch (Exception ex)
{
throw ex;
}
}
private void IsConnOpen()
{
try
{
if (DbConn.State == ConnectionState.Closed)
{
Open();
}
}
catch (Exception ex)
{
throw ex;
}
}
public Boolean IsOpen()
{
return DBStatus;
}
public void Close()
{
if (IsOpen())
{
DbConn.Close();
DbConn.Dispose();
DBStatus = false;
}
}
public Int16 Insert(string SqlQuery, params SqlParameter[] SqlParam)
{
IsConnOpen();
Int16 newProdID = 0;
SqlCommand cmd = default(SqlCommand);
SqlQuery += ";SELECT CAST(SCOPE_IDENTITY() AS int);";
cmd = new SqlCommand(SqlQuery, DbConn);
if (CmdTimeOut >= 0)
{
cmd.CommandTimeout = CmdTimeOut;
}
foreach (SqlParameter param in SqlParam)
{
cmd.Parameters.Add(param);
}
newProdID = Convert.ToInt16(cmd.ExecuteScalar());
return newProdID;
}
public Int64 Execute(string SqlQuery)
{
IsConnOpen();
Int64 newProdID = 0;
SqlCommand cmd = new SqlCommand(SqlQuery, DbConn);
if (CmdTimeOut >= 0)
{
cmd.CommandTimeout = CmdTimeOut;
}
newProdID = Convert.ToInt64(cmd.ExecuteNonQuery());
return newProdID;
}
public Int64 Execute(string SqlQuery, params SqlParameter[] SqlParam)
{
IsConnOpen();
SqlCommand cmd = new SqlCommand(SqlQuery, DbConn);
if (CmdTimeOut >= 0)
{
cmd.CommandTimeout = CmdTimeOut;
}
foreach (SqlParameter param in SqlParam)
{
cmd.Parameters.Add(param);
}
return Convert.ToInt64(cmd.ExecuteNonQuery());
}
public object SP_Execute(string SpName, params SqlParameter[] SqlParam)
{
IsConnOpen();
SqlCommand cmd = new SqlCommand(SpName, DbConn);
if (CmdTimeOut >= 0)
{
cmd.CommandTimeout = CmdTimeOut;
}
cmd.CommandType = CommandType.StoredProcedure;
foreach (SqlParameter param in SqlParam)
{
cmd.Parameters.Add(param);
}
return cmd.ExecuteScalar();
}
public object SelectColumn(string SqlQuery, params SqlParameter[] SqlParam)
{
IsConnOpen();
SqlCommand cmd = new SqlCommand(SqlQuery, DbConn);
if (CmdTimeOut >= 0)
{
cmd.CommandTimeout = CmdTimeOut;
}
cmd.CommandType = CommandType.Text;
foreach (SqlParameter param in SqlParam)
{
cmd.Parameters.Add(param);
}
return cmd.ExecuteScalar();
}
public object SelectColumn(string tablename, string columnname, string condition)
{
IsConnOpen();
if (!string.IsNullOrEmpty(condition))
{
condition = "where " + condition;
}
string query = null;
query = "select " + columnname + " from " + tablename + " " + condition;
SqlCommand cmd = new SqlCommand(query, DbConn);
if (CmdTimeOut >= 0)
{
cmd.CommandTimeout = CmdTimeOut;
}
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
DataSet dbtable = new DataSet();
adapter.Fill(dbtable, tablename);
if (dbtable.Tables[tablename].Rows.Count > 0)
{
return dbtable.Tables[tablename].Rows[0][0];
}
else
{
return "no_record_found";
}
}
public DataTable Select_Table(string SqlQuery)
{
IsConnOpen();
SqlCommand cmd = new SqlCommand(SqlQuery, DbConn);
if (CmdTimeOut >= 0)
{
cmd.CommandTimeout = CmdTimeOut;
}
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
DataSet dbtable = new DataSet();
adapter.Fill(dbtable, "recordset");
return dbtable.Tables["recordset"];
}
public DataTable Select_Table(string SqlQuery, params SqlParameter[] SqlParam)
{
IsConnOpen();
SqlCommand cmd = new SqlCommand(SqlQuery, DbConn);
if (CmdTimeOut >= 0)
{
cmd.CommandTimeout = CmdTimeOut;
}
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
foreach (SqlParameter param in SqlParam)
{
cmd.Parameters.Add(param);
}
DataSet dbtable = new DataSet();
adapter.Fill(dbtable, "recordset");
return dbtable.Tables["recordset"];
}
public int Select_Row(string SqlQuery, ref DataRow RowData, params SqlParameter[] SqlParam)
{
IsConnOpen();
SqlCommand cmd = new SqlCommand(SqlQuery, DbConn);
if (CmdTimeOut >= 0)
{
cmd.CommandTimeout = CmdTimeOut;
}
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
foreach (SqlParameter param in SqlParam)
{
cmd.Parameters.Add(param);
}
DataSet dbtable = new DataSet();
adapter.Fill(dbtable, "recordset");
if (dbtable.Tables["recordset"].Rows.Count > 0)
{
RowData = dbtable.Tables["recordset"].Rows[0];
return dbtable.Tables["recordset"].Rows.Count;
}
else
{
RowData = null;
return 0;
}
}
public DataTable SP_Execute_Table(string SpName, params SqlParameter[] SqlParam)
{
IsConnOpen();
SqlCommand cmd = new SqlCommand();
cmd.CommandText = SpName;
cmd.CommandType = CommandType.StoredProcedure;
cmd.Connection = DbConn;
if (CmdTimeOut >= 0)
{
cmd.CommandTimeout = CmdTimeOut;
}
foreach (SqlParameter param in SqlParam)
{
cmd.Parameters.Add(param);
}
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
DataSet dbtable = new DataSet();
adapter.Fill(dbtable, "recordset");
return dbtable.Tables["recordset"];
}
}
説明を追加できますか? – Robert
より簡単なオーバーロードを作成し、GetConectionString()メソッドを実装して他のものをラップすることができます:-) –