2017-11-08 15 views
2

に戻します。私はこの種のことについて既に尋ねられましたが、何か試してみると、この正確なインスタンスではうまく動作しません。私は、リモートSQL Serverデータベースをセットアップして、2000以上の行を持っています。多くのSQL結果をC#配列

これは私のC#です:

command.Connection = connectionString; 
command.CommandType = CommandType.Text; 
command.CommandText = "SELECT IconUrl FROM Items WHERE DefIndex IN " + iconSqlString; 
connection.Open(); 
string iconString = command.ExecuteScalar().ToString(); 
connection.Close(); 

私はSqlConnectionオブジェクトを設定し、すべてのこと持っていない、私はちょうど含まれることが必要であるとは思いません。

iconSqlStringの形式は(32, 126, 68)です。文字列は150以上の項目を持ち、毎回異なっています。私は、文字列内のすべての項目のIconUrlを返す必要があります。現在のクエリは、何らかの理由でIconUrlを返します。これは、51番目の位置(196のうち)の値が35のアイテムです。私はiconStringが文字列の形式であることを知っていますが、テスト目的のためだけであり、すべての結果を返すことを期待していました。カンマなどで区切られています。 sqlItem [5]のようなもので後で呼ばれるように、すべての値を配列に戻したいと思います。どうすればいい?

+1

スカラーは単一の結果です。代わりに[ExecuteReader()](https://msdn.microsoft.com/en-us/library/9kcbe65k(v = vs.110).aspx)が必要です。そのリンク先ページの一番下にそれを使用する方法の例があります。 – itsme86

+0

これを答えとして提供していただきたい場合は、回答として記入してください) – SlothGod

+1

[小さなボビーテーブルに注意してください](https://xkcd.com/327/)パラメータ化を使用するクエリ。 –

答えて

3

ExecuteScalarは単一結果のため、代わりにExecuteReaderを使用する必要があります。

また、SQLIまたはSQL Injectionと呼ばれる攻撃のために、クエリを実行するために変数を使用しないでください。ここに、how to execute parameterized queriesに関するいくつかの例のリンクがあります。

+0

文字列に使用されているデータは、純粋にコードの背後にあるAPIを使用して取得されますが、SQLインジェクションはこの場合でも問題になりますか? – SlothGod

+0

システムを侵害する方法は常にあります。あなたの現在のシステムアーキテクチャーを知らない私は、依然としてパラメーター化された照会の使用を推奨します。転ばぬ先の杖。 – SniperLegacy

関連する問題