ストアド プロシージャを使用します。これが最も安全な方法です。
いくつかのヒント:
System.Data.SqlClient
おそらく名前空間オブジェクトも使用できます
- 接続、コマンド、およびアダプタ オブジェクトの初期化を
using
ステートメントで囲みます。
簡単な例を次に示します。
string sqlStoredProcedure = "SelectFromTable";
using (OdbcConnection dbConnection = new OdbcConnection(dbConnectionString))
{
dbConnection.Open();
using (OdbcCommand command = new OdbcCommand(sqlStoredProcedure, dbConnection))
{
command.CommandType = System.Data.CommandType.StoredProcedure;
command.Parameters.Add(new OdbcParameter("@table", tableName));
using (OdbcDataAdapter adapter = new OdbcDataAdapter(command))
{
adapter.SelectCommand = command;
adapter.Fill(tableData);
}
}
}
もう 1 つの方法は、すべてのテーブル名を取得し、tableName
文字列変数をリスト内のエントリとして検証することです。おそらく次を使用します。
DataTable tables = dbConnection.GetSchema(OdbcMetaDataCollectionNames.Tables);
シナリオに基づく簡単な実装を次に示します。
string sql = "SELECT TOP 10 * FROM {0}";
using (OdbcConnection dbConnection = new OdbcConnection(dbConnectionString))
{
dbConnection.Open();
DataTable tables = dbConnection.GetSchema(OdbcMetaDataCollectionNames.Tables);
var matches = tables.Select(String.Format("TABLE_NAME = '{0}'", tableName));
//check if table exists
if (matches.Count() > 0)
{
using (OdbcCommand command = new OdbcCommand(String.Format(sql, tableName), dbConnection))
{
using (OdbcDataAdapter adapter = new OdbcDataAdapter(command))
{
adapter.SelectCommand = command;
adapter.Fill(tableData);
}
}
}
else
{
//handle invalid value
}
}