2011-10-24 9 views
0

私はプログラミングの初心者です。誰かが私を助けてくれることを願っています。 私はC#で受け取ったデータをMySqlに保存します:受け取ったデータに応じて、テーブルは変数 でなければなりません。C#からMySqlへのInsertQuery

ストリングmyInsertQuery = String.Formatの(「volumen。INSERT INTO(日付、時刻、 bidvol、bidprice、askprice、askvol、lastprice、体積)VALUES({0}、 {1}、{2}、 {3}、{4}、{5}、{6}、{7}) "、now_date_marketlast、 now_time_marketlast、bidvol、bidprice、askprice、askvol、ePrice1、 e.Volume);

しかし、テーブル変数を定義する方法です。 volumenを{0}に置き換えると、テーブルは動作しません。 私を助けてください。 ありがとうございます。

+0

コードには、SQLインジェクションと呼ばれる深刻なセキュリティリスクがあります。パラメータ化クエリ(SQLセキュリティの問題をすべて解決するわけではありませんが、簡単で安全なコードに向かって進んでいきます)を読むことをお勧めします。 –

答えて

0

この試してください:あなたは、テーブル名を割り当てることにしたい場合は

var tableName = "volumen"; 

string myInsertQuery = String.Format("INSERT INTO {8} (date, time, bidvol, bidprice, askprice, askvol, lastprice, volume) VALUES({0}, {1}, {2}, {3}, {4}, {5}, {6}, {7})", now_date_marketlast, now_time_marketlast, bidvol, bidprice, askprice, askvol, ePrice1, e.Volume, tableName); 
+0

それは動作しますが、文字列テーブルの場合。 \t \t \t if((Instrument.FullName)== "$ EURUSD") \t \t \t table = "eurusd"; \t \t \t var tableName = table; 「割り当てられていないローカル変数テーブル」が発生します。私に何ができる? – Jusva

+0

私はそれを持っている文字列テーブル= ""; – Jusva

0

を。あなたはこれを行うことができます:

string myInsertQuery = String.Format("INSERT INTO {8} (date, time, bidvol, bidprice, askprice, askvol, lastprice, volume) VALUES({0}, {1}, {2}, {3}, {4}, {5}, {6}, {7})", now_date_marketlast, now_time_marketlast, bidvol, bidprice, askprice, askvol, ePrice1, e.Volume, volumen); 

Volumenを自分のテーブル名がまず

1

オフになっている、それはSQLインジェクション攻撃にあなたのコードを開きますので、あなたはおそらく、あなたがしようとしている何を行うにはしたくありません。 SqlCommandオブジェクトを使用して、SQLインジェクションに対してオープンではないSQLステートメントを動的に作成する方法があります。

volumenを{0}に置き換えると、値のリストの先頭にテーブル名を追加しない限り、now_date_marketlastがテーブル名として挿入されます。これを書くための適切な方法は、次のようになります。

string myInsertQuery = String.Format("INSERT INTO {0} (date, time, bidvol, bidprice, askprice, askvol, lastprice, volume) VALUES({1}, {2}, {3}, {4}, {5}, {6}, {7}, {8})", "volumen", now_date_marketlast, now_time_marketlast, bidvol, bidprice, askprice, askvol, ePrice1, e.Volume); 

あなたはまだあなただけのコード内の別のポイントでそれをやっている、テーブル名を指定する必要があるとしています。ここでも、SQLインジェクションのために良いアイデアはありません。

あなたが渡しているデータに応じてMySQLがどのテーブルを使用しているかを判断する方法を探しているなら、データベースエンジンはこのように動作しない傾向があります。

+0

あなたの声明には誤りがあります。 {0}に間違った値を割り当てています – DarthVader