2009-08-03 10 views
3

私はADO.NETヘルパーユーティリティクラスを探して、ADO.NETデータソースを照会できるようにしています。あまりにも派手なものを探しているわけではありませんが、トランザクションをサポートする必要があります。そこに何かありますか?まともなADO.NETヘルパーのユーティリティはありますか?

P.S.私はデータアクセスブロックがそれを行うことは知っていますが、私は他のコンポーネントとは少し独立したものを探していました。単純なライブラリや何かのように

答えて

2

ちょうど軽いラッパーの場合は、自分でコマンドをラップしてみませんか?

例:

/// <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(); 
     } 
    } 
+0

より簡単なオーバーロードを作成し、GetConectionString()メソッドを実装して他のものをラップすることができます:-) –

4

あなたの定義は「何もない」と「シンプル」に依存しますが、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を本当に恐れてはいけません。

+0

これは私が考えている何という手の込んだです。私はsomething.CommandType =テキストを行うことができるようにしたいと思います。 command.AddInParameter( "foo"、value); command.CommandText = "Select * From SomeTable"; helper.GetDataset(command、connectionString); これだけ簡単なものは何ですか?基本的にはstd ado.netのオブジェクトとメソッドの上に非常に非常に軽いラッパーです – Yannis

+0

明確化:私はdbからデータセットを取得するために気をつけます。私はormを気にしません - 実際にはそれをしたくないです – Yannis

+0

私はormsを恐れていません.....私は実際にそれらをかなり重く使用します。この特定のシナリオでは、ORMは十分ではありません。ありがとう – Yannis

0
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"]; 
    } 
} 
+0

説明を追加できますか? – Robert

関連する問題