C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: GridViewの複数列による曖昧な検索


(過去ログ 99 を表示中)

[トピック内 10 記事 (1 - 10 表示)]  << 0 >>

■59241 / inTopicNo.1)  GridViewの複数列による曖昧な検索
  
□投稿者/ ミック (1回)-(2011/05/19(Thu) 21:27:27)

分類:[.NET 全般] 

お世話になります
現在GridViewで検索を作っています
フィールド数に応じてテキストボックスを配置しフィールドごとに曖昧に検索させる手法です

環境xppro
sqlserver
visualstudio2005
asp.net
本人初心者

■実現できていること
accessのテーブルだと実行が可能です 下記

<asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Ldata\loop\流通.mdb"
ProviderName="System.Data.OleDb" SelectCommand="SELECT * FROM [流通] WHERE ([入金日] >= IIf(IsDate(@StartDate) = False, Null, @StartDate) OR IsDate(@StartDate) = False) AND ([入金日] <= IIf(IsDate(@EndDate) = False, Null, @EndDate) or IsDate(@EndDate) = False) AND (([ファイルパス] LIKE '%' + @param3 + '%') OR ([ファイルパス] IS NULL AND @param3 = '')) " >

<SelectParameters>
<asp:ControlParameter ControlID="TextBox1" ConvertEmptyStringToNull="False" Name="?"
PropertyName="Text" />
<asp:ControlParameter ControlID="TextBox2" ConvertEmptyStringToNull="False" Name="?"
PropertyName="Text" />
<asp:ControlParameter ControlID="TextBox3" ConvertEmptyStringToNull="False" Name="?"
PropertyName="Text" />
<asp:ControlParameter ControlID="TextBox4" ConvertEmptyStringToNull="False" Name="?"
PropertyName="Text" />


</SelectParameters>

■できなかったこと
Providerが変わるとエラーが出ます。

スカラ変数 "@StartDate" を宣言してください。
説明: 現在の Web 要求を実行中に、ハンドルされていない例外が発生しました。エラーに関する詳細および例外の発生場所については、スタック トレースを参照してください。
例外の詳細: System.Data.OleDb.OleDbException: スカラ変数 "@StartDate" を宣言してください。
下記コード
<asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="Provider=SQLOLEDB;Data Source=SERVER\SQLEXPRESS;Persist Security Info=True;Password=loop;User ID=loop;Initial Catalog=流通"
ProviderName="System.Data.OleDb" SelectCommand="SELECT * FROM [流通] WHERE (入金日 >= IIf(IsDate(@StartDate) = False, Null, @StartDate) OR IsDate(@StartDate) = False) AND (入金日 <= IIf(IsDate(@EndDate) = False, Null, @EndDate) or IsDate(@EndDate) = False) AND (([ファイルパス] LIKE '%' + @param3 + '%') OR ([ファイルパス] IS NULL AND @param3 = '')) " >

<SelectParameters>
<asp:ControlParameter ControlID="TextBox1" ConvertEmptyStringToNull="False" Name="?"
PropertyName="Text" />
<asp:ControlParameter ControlID="TextBox2" ConvertEmptyStringToNull="False" Name="?"
PropertyName="Text" />
<asp:ControlParameter ControlID="TextBox3" ConvertEmptyStringToNull="False" Name="?"
PropertyName="Text" />
<asp:ControlParameter ControlID="TextBox4" ConvertEmptyStringToNull="False" Name="?"
PropertyName="Text" />

同ように作っているのにProviderが変わるだけでエラーになります
どなたか説明と回避方法分かる方ご教授願います。
引用返信 編集キー/
■59252 / inTopicNo.2)  Re[1]: GridViewの複数列による曖昧な検索
□投稿者/ ペー (1回)-(2011/05/19(Thu) 23:42:09)
No59241 (ミック さん) に返信

SQLServerにIIFってありましたっけ?
引用返信 編集キー/
■59253 / inTopicNo.3)  Re[2]: GridViewの複数列による曖昧な検索
□投稿者/ 日高 (1回)-(2011/05/20(Fri) 00:07:20)
>Providerが変わるだけでエラーになります
引用返信 編集キー/
■59254 / inTopicNo.4)  Re[3]: GridViewの複数列による曖昧な検索
□投稿者/ ミック (2回)-(2011/05/20(Fri) 00:55:36)
No59241 (ミック さん) に返信

>>SQLServerにIIFってありましたっけ?


No59253 (日高 さん) に返信
> >Providerが変わるだけでエラーになります


お返事真に有難うございます

SQL文自体初心者でどうすればいいのか・・
Providerが変わるだけで駄目なんですね?

どのように変更すれば良いですか?
相談する相手もいなくてずっと悩んでました、
これが解ければほぼ完了でなにとぞゴールに導いていただければ幸いです

引用返信 編集キー/
■59273 / inTopicNo.5)  Re[4]: GridViewの複数列による曖昧な検索
□投稿者/ マサヤ (322回)-(2011/05/20(Fri) 09:57:22)
http://wiki.livedoor.jp/uepon2929/d/SQLServer%A4%C7ACCESS%A4%CEIIF%B4%D8%BF%F4%A4%CB%C2%E5%A4%EF%A4%EB%A4%E2%A4%CE
IIFに代わるもの

引用返信 編集キー/
■59274 / inTopicNo.6)  Re[1]: GridViewの複数列による曖昧な検索
□投稿者/ みきぬ (967回)-(2011/05/20(Fri) 10:28:18)
> スカラ変数 "@StartDate" を宣言してください。

OleDb だと、名前つきパラメータは使えません。
使っても無視されるので、パラメータの出現順に Parameter をセットする必要があります。
同じ名前のパラメータが複数出現している場合は、それぞれセットする必要があります。
質問にあるクエリだとこれだけ必要。
@StartDate
@StartDate
@StartDate
@EndDate
@EndDate
@EndDate
@param3
@param3

で回避策ですが、SQLServer に接続するのなら .NET Framework Data Provider for SQL Server(System.Data.SqlClientのクラス群)を使うのが無難です。

それと IIF は Access 固有の関数なので SQLServer では使えません。CASE 文を使って書き直すか、
@StartDate と @EndDate の中身が日付でない場合のチェックをアプリ側でおこなって(日付でない場合は入力エラーにして検索しない)
IIF を使わないか、どちらかする必要があります。
引用返信 編集キー/
■59282 / inTopicNo.7)  Re[2]: GridViewの複数列による曖昧な検索
□投稿者/ ミック (3回)-(2011/05/20(Fri) 11:05:35)
No59274 (みきぬ さん) に返信
>>スカラ変数 "@StartDate" を宣言してください。
>
> OleDb だと、名前つきパラメータは使えません。
> 使っても無視されるので、パラメータの出現順に Parameter をセットする必要があります。
> 同じ名前のパラメータが複数出現している場合は、それぞれセットする必要があります。
> 質問にあるクエリだとこれだけ必要。
> @StartDate
> @StartDate
> @StartDate
> @EndDate
> @EndDate
> @EndDate
> @param3
> @param3
>
> で回避策ですが、SQLServer に接続するのなら .NET Framework Data Provider for SQL Server(System.Data.SqlClientのクラス群)を使うのが無難です。
>
> それと IIF は Access 固有の関数なので SQLServer では使えません。CASE 文を使って書き直すか、
> @StartDate と @EndDate の中身が日付でない場合のチェックをアプリ側でおこなって(日付でない場合は入力エラーにして検索しない)
> IIF を使わないか、どちらかする必要があります。


パラメータを何処にどのように設置すれば (難題)
アダプタの変更はデザインからの変更でコードの作成はしてくれそうですね
日付に関しては日付以外入力が出来なくしてしまえばエラーを出す必要もないと思っています (空白か入力済みか)
IIFに関してはマサヤ様にご提示いただいた物ですよねCASE (難題)


作成していたAccess可能だったが
sqlserverになると作り方自体に問題があるようなかんじがしてきました
作成しようとしている形でよい方法ありますか?
書籍を購入しているのですがすべてAccessのテーブルがデータでです
引用返信 編集キー/
■59286 / inTopicNo.8)  Re[3]: GridViewの複数列による曖昧な検索
□投稿者/ Mira (39回)-(2011/05/20(Fri) 12:43:05)
ちがってたらごめんなさい

やりたいことはデーターベースをAccessからSqlServerに移行することですよね?

そういうことでかつプログラムの方を書き直すのが難題でしたら

AccessにSqlServerのリンクテーブル作ってはいかがでしょうか?
引用返信 編集キー/
■59287 / inTopicNo.9)  Re[4]: GridViewの複数列による曖昧な検索
□投稿者/ ミック (4回)-(2011/05/20(Fri) 13:19:26)
2011/05/20(Fri) 13:36:40 編集(投稿者)

No59286 (Mira さん) に返信
> ちがってたらごめんなさい
>
> やりたいことはデーターベースをAccessからSqlServerに移行することですよね?
>
> そういうことでかつプログラムの方を書き直すのが難題でしたら
>
> AccessにSqlServerのリンクテーブル作ってはいかがでしょうか?


そうです
環境はAccessからアップサイジェンシを実行してsqlserverへ移行ですが

もう一つ有りましてグローバルに出すことです
言われたことも実行しましたが
(sqlserverのテーブルをAccessにリンクしそれをつかう)

イントラ内からだと(Localhost)見えて友人にお願いしてみてもらうと(ダイナミックDNS)見れない状態にあります
(web.configのエラー)

Accessを元データとした場合は表示までしか
おこなってませんがおそらく可能でした。
そうすると今まで作った物がすべてAccessのdbへ移行となり板ばさみ状態です。

よく分かりましたね!
ちょっとびっくりしました。

こちらの状況を察知し返答、誘導等々真に有難うございます
引用返信 編集キー/
■59294 / inTopicNo.10)  Re[5]: GridViewの複数列による曖昧な検索
□投稿者/ Mira (40回)-(2011/05/20(Fri) 16:13:16)
2011/05/20(Fri) 16:14:25 編集(投稿者)

イントラネットで実行できて外部からだとだめなのはおそらく

リンクテーブルに使用しているODBCデーターソースのログイン設定が
WindowsNT認証メカニズムを使うになってるからだと思います

ユーザーが入力するSQL Server用のログインIDとパスワードを使う

の方にチェックを入れて

ログインIDとパスワードを設定して試してみてください
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -