QA@IT
«回答へ戻る

5599
 
 Shu さんの提示された String.Formatなども覚えると便利ですので調べて習得されるといいとおもいます(基本の使い方はわかっちゃえば単純だとおもいます)。
 
+
+長文失礼。

前回のコード ( http://qa.atmarkit.co.jp/q/3632 ) の感じから、
サンプルを試しに改造してみながら実行されているような印象を受けます。

それ自体は構いませんが、一旦動いたのであれば 各行やメソッドが何を受け取って何を返してくれるのかも考えるようにされるとよいと思います。

たとえば

int a = 1 + 2 + 3 + 4;

は 実行されると a には 結局 10が入る事になるのはわかると思います。
前回は

DataRow[] rows = tblAuthors2.Select("NoShisetu= rNoShisetu and FoodCode = rFoodCode");

DataRow[] rows = tblAuthors2.Select("NoShisetu= '" + rNoShisetu + "' and FoodCode = '" + rFoodCode + "'");

にしたら動くようになりましたが、プログラムが動くと 直した方では Selectメソッドに
何を渡したことになっているのか。
Selectメソッドは何を返す事になっているのか ( どういうものをrowsとして受け取るのか )。
などを考えてみましょう。


今回の

if (DataRow[] dt = datatableA.Select("ShisetsuCode = '" + rShisetsuCode + "'", "FoodCode = '" + rCode + "'" == true))

trueの部分は おそらくは

// これでも 動かないコード
if (  DataRow[] dt = datatableA.Select("ShisetsuCode = '" + rShisetsuCode + "'", "FoodCode = '" + rCode + "'" )     == true )

のような、Selectできたなら 成功値が返ってくれないかという事でしょうが、残念ながらこれでも文法的にもおかしいですし、Selectに成功してもそういう値は返らないのでこれではうまくいきません。

また、 Selectメソッドには

"ShisetsuCode = '" + rShisetsuCode + "'", "FoodCode = '" + rCode + "'"

を渡していることになりますが、これは
"ShisetsuCode = '" + rShisetsuCode + "'""FoodCode = '" + rCode + "'" の 2つの引数を渡していることになります。
Selectメソッドでは 1つ目と 2つ目は 別の用途に使われます。
そして今回エラーがでているのは、その別の用途に使われる 2つ目の引数に間違ったものを渡しているためです。

Selectメソッド
http://msdn.microsoft.com/ja-jp/library/way3dy9w(v=vs.110).aspx
パラメータ の部分を見てみてください。

カンマで区切っていなかったはこちらです。
http://msdn.microsoft.com/ja-jp/library/det4aw50(v=vs.110).aspx

また戻り値 の部分に書いてある説明から、 dt が何なのかを調べる手がかりにされるとよいでしょう。
(実際のところわかっていればそこに書いてあるそのままなんですが、もし「配列」などもまだよくわからなければ入門サイトなどで調べてみるといいと思います。)

Shu さんの提示された String.Formatなども覚えると便利ですので調べて習得されるといいとおもいます(基本の使い方はわかっちゃえば単純だとおもいます)。

長文失礼。

前回のコード ( http://qa.atmarkit.co.jp/q/3632 ) の感じから、
サンプルを試しに改造してみながら実行されているような印象を受けます。

それ自体は構いませんが、一旦動いたのであれば 各行やメソッドが何を受け取って何を返してくれるのかも考えるようにされるとよいと思います。

たとえば

```csharp
int a = 1 + 2 + 3 + 4;
```
は 実行されると a には 結局 10が入る事になるのはわかると思います。
前回は

```csharp
DataRow[] rows = tblAuthors2.Select("NoShisetu= rNoShisetu and FoodCode = rFoodCode");
```

を

```csharp
DataRow[] rows = tblAuthors2.Select("NoShisetu= '" + rNoShisetu + "' and FoodCode = '" + rFoodCode + "'");
```

にしたら動くようになりましたが、プログラムが動くと 直した方では Selectメソッドに
何を渡したことになっているのか。
Selectメソッドは何を返す事になっているのか ( どういうものをrowsとして受け取るのか )。
などを考えてみましょう。


---

今回の 

```csharp
if (DataRow[] dt = datatableA.Select("ShisetsuCode = '" + rShisetsuCode + "'", "FoodCode = '" + rCode + "'" == true))
```

trueの部分は おそらくは
```csharp
// これでも 動かないコード
if (  DataRow[] dt = datatableA.Select("ShisetsuCode = '" + rShisetsuCode + "'", "FoodCode = '" + rCode + "'" )     == true )
```
のような、Selectできたなら 成功値が返ってくれないかという事でしょうが、残念ながらこれでも文法的にもおかしいですし、Selectに成功してもそういう値は返らないのでこれではうまくいきません。


また、 Selectメソッドには

```csharp
"ShisetsuCode = '" + rShisetsuCode + "'", "FoodCode = '" + rCode + "'"
```

を渡していることになりますが、これは
`"ShisetsuCode = '" + rShisetsuCode + "'"` と `"FoodCode = '" + rCode + "'"` の 2つの引数を渡していることになります。
Selectメソッドでは 1つ目と 2つ目は 別の用途に使われます。
そして今回エラーがでているのは、その別の用途に使われる 2つ目の引数に間違ったものを渡しているためです。

Selectメソッド
http://msdn.microsoft.com/ja-jp/library/way3dy9w(v=vs.110).aspx
パラメータ の部分を見てみてください。

カンマで区切っていなかったはこちらです。
http://msdn.microsoft.com/ja-jp/library/det4aw50(v=vs.110).aspx

また戻り値 の部分に書いてある説明から、 `dt` が何なのかを調べる手がかりにされるとよいでしょう。
(実際のところわかっていればそこに書いてあるそのままなんですが、もし「配列」などもまだよくわからなければ入門サイトなどで調べてみるといいと思います。)


Shu さんの提示された String.Formatなども覚えると便利ですので調べて習得されるといいとおもいます(基本の使い方はわかっちゃえば単純だとおもいます)。


長文失礼。

回答を投稿

前回のコード ( http://qa.atmarkit.co.jp/q/3632 ) の感じから、
サンプルを試しに改造してみながら実行されているような印象を受けます。

それ自体は構いませんが、一旦動いたのであれば 各行やメソッドが何を受け取って何を返してくれるのかも考えるようにされるとよいと思います。

たとえば

int a = 1 + 2 + 3 + 4;

は 実行されると a には 結局 10が入る事になるのはわかると思います。
前回は

DataRow[] rows = tblAuthors2.Select("NoShisetu= rNoShisetu and FoodCode = rFoodCode");

DataRow[] rows = tblAuthors2.Select("NoShisetu= '" + rNoShisetu + "' and FoodCode = '" + rFoodCode + "'");

にしたら動くようになりましたが、プログラムが動くと 直した方では Selectメソッドに
何を渡したことになっているのか。
Selectメソッドは何を返す事になっているのか ( どういうものをrowsとして受け取るのか )。
などを考えてみましょう。


今回の

if (DataRow[] dt = datatableA.Select("ShisetsuCode = '" + rShisetsuCode + "'", "FoodCode = '" + rCode + "'" == true))

trueの部分は おそらくは

// これでも 動かないコード
if (  DataRow[] dt = datatableA.Select("ShisetsuCode = '" + rShisetsuCode + "'", "FoodCode = '" + rCode + "'" )     == true )

のような、Selectできたなら 成功値が返ってくれないかという事でしょうが、残念ながらこれでも文法的にもおかしいですし、Selectに成功してもそういう値は返らないのでこれではうまくいきません。

また、 Selectメソッドには

"ShisetsuCode = '" + rShisetsuCode + "'", "FoodCode = '" + rCode + "'"

を渡していることになりますが、これは
"ShisetsuCode = '" + rShisetsuCode + "'""FoodCode = '" + rCode + "'" の 2つの引数を渡していることになります。
Selectメソッドでは 1つ目と 2つ目は 別の用途に使われます。
そして今回エラーがでているのは、その別の用途に使われる 2つ目の引数に間違ったものを渡しているためです。

Selectメソッド
http://msdn.microsoft.com/ja-jp/library/way3dy9w(v=vs.110).aspx
パラメータ の部分を見てみてください。

カンマで区切っていなかったはこちらです。
http://msdn.microsoft.com/ja-jp/library/det4aw50(v=vs.110).aspx

また戻り値 の部分に書いてある説明から、 dt が何なのかを調べる手がかりにされるとよいでしょう。
(実際のところわかっていればそこに書いてあるそのままなんですが、もし「配列」などもまだよくわからなければ入門サイトなどで調べてみるといいと思います。)

Shu さんの提示された String.Formatなども覚えると便利ですので調べて習得されるといいとおもいます(基本の使い方はわかっちゃえば単純だとおもいます)。

前回のコード ( http://qa.atmarkit.co.jp/q/3632 ) の感じから、
サンプルを試しに改造してみながら実行されているような印象を受けます。

それ自体は構いませんが、一旦動いたのであれば 各行やメソッドが何を受け取って何を返してくれるのかも考えるようにされるとよいと思います。

たとえば

```csharp
int a = 1 + 2 + 3 + 4;
```
は 実行されると a には 結局 10が入る事になるのはわかると思います。
前回は

```csharp
DataRow[] rows = tblAuthors2.Select("NoShisetu= rNoShisetu and FoodCode = rFoodCode");
```

を

```csharp
DataRow[] rows = tblAuthors2.Select("NoShisetu= '" + rNoShisetu + "' and FoodCode = '" + rFoodCode + "'");
```

にしたら動くようになりましたが、プログラムが動くと 直した方では Selectメソッドに
何を渡したことになっているのか。
Selectメソッドは何を返す事になっているのか ( どういうものをrowsとして受け取るのか )。
などを考えてみましょう。


---

今回の 

```csharp
if (DataRow[] dt = datatableA.Select("ShisetsuCode = '" + rShisetsuCode + "'", "FoodCode = '" + rCode + "'" == true))
```

trueの部分は おそらくは
```csharp
// これでも 動かないコード
if (  DataRow[] dt = datatableA.Select("ShisetsuCode = '" + rShisetsuCode + "'", "FoodCode = '" + rCode + "'" )     == true )
```
のような、Selectできたなら 成功値が返ってくれないかという事でしょうが、残念ながらこれでも文法的にもおかしいですし、Selectに成功してもそういう値は返らないのでこれではうまくいきません。


また、 Selectメソッドには

```csharp
"ShisetsuCode = '" + rShisetsuCode + "'", "FoodCode = '" + rCode + "'"
```

を渡していることになりますが、これは
`"ShisetsuCode = '" + rShisetsuCode + "'"` と `"FoodCode = '" + rCode + "'"` の 2つの引数を渡していることになります。
Selectメソッドでは 1つ目と 2つ目は 別の用途に使われます。
そして今回エラーがでているのは、その別の用途に使われる 2つ目の引数に間違ったものを渡しているためです。

Selectメソッド
http://msdn.microsoft.com/ja-jp/library/way3dy9w(v=vs.110).aspx
パラメータ の部分を見てみてください。

カンマで区切っていなかったはこちらです。
http://msdn.microsoft.com/ja-jp/library/det4aw50(v=vs.110).aspx

また戻り値 の部分に書いてある説明から、 `dt` が何なのかを調べる手がかりにされるとよいでしょう。
(実際のところわかっていればそこに書いてあるそのままなんですが、もし「配列」などもまだよくわからなければ入門サイトなどで調べてみるといいと思います。)


Shu さんの提示された String.Formatなども覚えると便利ですので調べて習得されるといいとおもいます(基本の使い方はわかっちゃえば単純だとおもいます)。