0

最初にデータベースに接続し、すべてのストアド プロシージャ、入力、および関連するデータ型のリストを含む dt を取得するアプリケーションを作成しています。次に、ユーザーはコンボボックスから SProc を選択し、必要な入力を入力する必要があります。その後、アプリはデータベースに接続し、選択した SProc をユーザー指定の入力で実行し、結果をデータテーブルに返します。

私が確信していないのは、SProc ごとに特定のメソッドを記述する必要があるかどうかです。それ以外の場合、パラメーターが何であるかをどのように述べることができるかがわからないので、そう仮定しています。

これを最初に明確にしなかったことをお詫びします。これでも十分に明確でない場合はお知らせください。

例を以下に示します(これは他の誰かのコードです)

public static GetDaysDTO GetDays(int offset)
    {
        GetDaysDTO ret = new GetDaysDTO { TODAY = DateTime.Now, TOMORROW = new DateTime(2012, 01, 01) };
        SqlConnection con = new System.Data.SqlClient.SqlConnection(@"Server = FrazMan-pc\Programming; Database = master; Trusted_Connection = True");
        SqlCommand cmd = new System.Data.SqlClient.SqlCommand
        {
            CommandText = "GetDays",
            CommandType = System.Data.CommandType.StoredProcedure,
            CommandTimeout = 1,
            Connection = con,
            Parameters = { new System.Data.SqlClient.SqlParameter("@offset", System.Data.SqlDbType.Int) { Value = offset } }
        };
        using (con)
        {
            con.Open();
            using (System.Data.SqlClient.SqlDataReader reader = cmd.ExecuteReader())
            {
                while (reader.Read())
                {
                    ret.TODAY = DateTime.Parse(reader[0].ToString());
                    ret.TOMORROW = DateTime.Parse(reader["TOMORROW"].ToString());
                }
            }
        }

        return ret;
    }
4

1 に答える 1

2

あなたが探しているのは、Factory と呼ばれる設計パターンと、各 SP 呼び出しで作成する型付きデータ テーブルを伝える方法
です。各プロシージャのパラメーターのリストがある場合は、ループを介してパラメーター オブジェクトをインスタンス化できます
。クラスは、データベースから受け取った SP のパラメーターを埋めるために使用されます

class ParamData
{
  public object Data;
  public SqlDbType type;
  public string ParamName;
}


その後、sp を呼び出すときに、ParamData オブジェクトもメソッドに渡し、それを使用して、ループ内で ur sp のパラメーターを動的に埋める必要があります。

List<ParamData> list = new List<ParamData>();
//initialize command here as u did
SqlCommand cmd;
foreach (ParamData param in list)
{
  SqlParameter sqlParam = new SqlParameter(param.ParamName, param.type);
  sqlParam.Value = param.Data;
  cmd.Parameters.Add(sqlParam);
}
//execute the command
//fill the datatable with result
DataTable dt = GetTableBySPName("GetDays");
SqlDataReader reader = cmd.ExecuteReader();
dt.Load(reader);


追加する必要があるのは、ur 型付きデータテーブルとプロシージャによって返されるテーブルとの間のマッピングだけです。
これを行うメソッドを追加できます。

private DataTable GetTableBySPName(string name)
{
  DataTable dt = null;
  switch (name)
  {
   case "GetDays":
   {
    dt = new GetDatsDTO();
    break;
   }
  }
 return dt;
}


于 2012-05-19T12:00:44.583 に答える