私の問題は、AddWithValueを使用すると2つの望ましくない一重引用符が表示されるということです。 これは私の関数を呼び出す方法です:c#MySqlCommand.Parameters.AddWithValue、テーブルを表現するパラメータ、結果のコマンドに一重引用符が追加されました
string sqlTableName = "the_table_i_want";
DataTable myDataTable = SQLcom.SelectLastValueInTab(sqlTableName);
My Function;
"SELECT * FROM 'the_table_i_want' ORDER BY id DESC LIMIT 1"
となると仮定されています:
public static DataTable SelectLastValueInTab(string TableName)
{
using (MySqlConnection con = new MySqlConnection(ConnStr))
{
using (MySqlCommand myCommand = new MySqlCommand("SELECT * FROM @TabName ORDER BY id DESC LIMIT 1", con))
{
myCommand.Parameters.AddWithValue("@TabName", TableName);
try
{
con.Open();
MySqlDataReader testreader = myCommand.ExecuteReader();
たコマンドがある
a syntax error near ''the_table_i_want' ORDER BY id DESC LIMIT 1'
PS:
"SELECT * FROM the_table_i_want ORDER BY id DESC LIMIT 1"
それはプログラムが私が持っているbeacauseクラッシュを引き起こします私がAddWithValuechangeを使用しない場合変更します。
@TabName for the_table_i_want
MySqlCommandで完全に動作します。
ありがとうございます!
ダニエルG.B
パラメータを使用して表またはフィールド名を表すことはできません。値に対してのみ使用できます。 – Steve
準備されたステートメントは、このように使用されることを意味しませんでした。 'AddWithValue'メソッドはそれが文字列であるとみなし、それを引用します。 'TableName'がユーザから提供されていない場合は、あなたのクエリでそれを連結しますが、それを大括弧で囲みます:' 'SELECT * FROM [" + TableName + "] ..." 'またはRDBMSが使用するシステム)。あなたはまた、どこかにリストされたテーブル名の有効なリストを持っていたい。 'TableName'がそのリストにない場合は、クエリを実行しないでください。これはSQLインジェクションからあなたを十分に保護するはずです。 –
@スティーブありがとうございましたそれはまさに私の問題でした!しかし、[メソッド定義?](https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlparametercollection.addwithvalue(v = vs.110).aspx)にはこれの仕様はありません。 –