0

これは @MSDN について読んでいた方法です。私の質問は、たとえば、ストアド プロシージャのクエリが、次のようにテーブルから選択する列を既に指定しているという事実を使用して、ストアド プロシージャでそれを使用したいかどうかです。

SELECT Columnsome, columnother, , , , ...FROM thisSQLdbTable

その特定の方法のアプローチを実装したいと思い ますが、SQL Server から Asp.net DataTable にデータを抽出するために利用できる「最良の方法」について行った小さな調査から、非常に進んでいるようです。

public static DataTable GetCustomerData(string dataSetName,
string connectionString)
{
DataTable table = new DataTable(dataSetName);

using (SqlConnection connection = new SqlConnection(connectionString))
{
    SqlDataAdapter adapter = new SqlDataAdapter(
        "SELECT CustomerID, CompanyName, ContactName FROM dbo.Customers", connection);

    DataTableMapping mapping = adapter.TableMappings.Add("Table", "Customers");
    mapping.ColumnMappings.Add("CompanyName", "Name");
    mapping.ColumnMappings.Add("ContactName", "Contact");

    connection.Open();

    adapter.FillSchema(table, SchemaType.Mapped);
    adapter.Fill(table);
    return table;
}

}

SPまたは、選択した列を指定してクエリを実行している場合に使用する方法ではありませんか

列を選択/指定する必要がない場合、実際にそのストアドプロシージャを削除できます

ストアド プロシージャは特定の計算を実行し、計算結果でテーブルを更新します。更新されたテーブルから結果を選択するために「MODE」を切り替えます。

私がしたことはリサイクルです (; パラメーター (ビット型) ストアド プロシージャを指定し、提供されたbool/bitパラメーターの値を要求します。ステータスが true の場合は更新します (作成された元のタスクを実行します)

false の場合は選択操作を行っているので、2 つの別々のコマンドと同じように使用しています。

しかし今、私はデータベースからデータテーブルにデータを抽出するより良い方法を探しています

私は双方向SPをあきらめ、上記を提供するときに事前選択を行う現在のSPのように一緒に使用することを意図していない場合、上記の例を介して選択を行いますGetCustomersData().

したがって、問題は、関数に選択を行わせる必要がありますか、それとも、残りのタスクのみを実行し、その列のみをマップする方法で GetCustomersData() を使用して実装するために、SP の既製の選択を使用して提供できますか?事前選択された

4

2 に答える 2

1

この使用例では、ストアド プロシージャは完全に有効です。ただし、より適切にマップされたテーブルが必要な場合は、いくつかのオプションがあり、そのうちのいくつかはDataTables.

厳密に型指定されたものをDataSets使用するか、おそらくORM( object relational mapper) を使用できます。

ref: 型指定されたデータセット: http://msdn.microsoft.com/en-us/library/esbykkzb(v=vs.71).aspx

ref: ORM とは: http://en.wikipedia.org/wiki/Object-relational_mapping

ORMの例

参照: エンティティ フレームワーク: http://msdn.microsoft.com/en-us/data/ef.aspx

参照: NHibernate: http://nhforge.org/

于 2012-11-06T06:54:36.153 に答える
1

実際の要件についてはまだ少し混乱していますが、次のようになります。

C#コードで直接クエリを使用しているようですが、「最善の方法」はそれからSPを作成してから次のように言うことです:

SqlCommand command = conn.CreateCommand();
            SqlDataAdapter sqlAdapter = new SqlDataAdapter(command);
            command.CommandType = System.Data.CommandType.StoredProcedure;
            command.CommandText = "sp_GetCustomerData";

次に、必要に応じてパラメーターを追加した後、次のことを行います。

            conn.Open();
            sqlAdapter.Fill(dtResult);                
            conn.Close();

dtResult は Datatable です。したがって、この場合、マッピングを行う必要はありません。また、データベースから SP を使用しているため、直接クエリよりも高速に動作し、コードを再デプロイする必要なくいつでもクエリ ロジックを変更できます。

于 2012-11-06T07:05:24.657 に答える