0

.cs ファイルに次のコードがあります。

SqlDataSource1.SelectParameters["LocID"].DefaultValue = "5957,5958";

.aspx ファイルに次のコードがあります

<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:KuzSQL %>" OnSelecting="DataSourceSelecting"
    SelectCommand="Select ID, RoomNum from [dbo].[Mbiology] WHERE LocId IN (@LocId)" >
    <SelectParameters>
        <asp:Parameter Name="LocId" />
    </SelectParameters>        
</asp:SqlDataSource>

次のエラーが表示されます。

nvarchar 値 '5957,5958' をデータ型 int に変換するときに変換に失敗しました。

LocId は Int 型であることに注意してください。

4

3 に答える 3

0

コントロールはこのタイプの操作をサポートしていません。SqlDataSource代わりに、少なくとも次のオプションがあります。

  1. コード ビハインドでクエリを作成します。

    protected void SomeEventHandler(object sender, EventArgs e)
    {
        // Create list of strings to hold ID values
        List<string> locIDs = new List<string>();
    
        // Build list of actual string values
        foreach (var item in SomeControl.Items)
        {
            locIDs.Add(value);
        }
    
        // Build SELECT command
        SqlDataSource1.SelectCommand = String.Format("Select ID, RoomNum from [dbo].[Mbiology] WHERE LocId IN ({0})", 
            String.Join(", ", productIDs.ToArray()));
    }
    
  2. ストアド プロシージャを作成し、ID 値のリストをパラメーターとして渡します。

于 2013-11-04T03:57:03.467 に答える
0

パラメータは、あなたが思っているように SQL に「挿入」されるだけではありません。値のリストをクエリに渡してIN句で使用するのは難しいです。

いくつかのオプション:

  1. 値を文字列としてストアド プロシージャに渡します。ストアド プロシージャは、文字列を解析して一時テーブルに格納し、次に使用します。IN
  2. いくつかのパラメーター ( 、 など) を使用してコマンドをセットアップしLocId1LocId2クエリを次のように変更します。

    Select ID, RoomNum from [dbo].[Mbiology] 
    WHERE LocId IN (@LocId1, @LocId2, @LocId3, @LocId4, @LocId5, @LocId6, ...)
    
  3. パラメータを別のテーブルに保存し(おそらく"sessionID"キーを使用して)、IN句でそこからプルします。
  4. 1 つのクエリで複数の値をサポートしないでください。
于 2013-11-04T03:47:41.670 に答える
0

プロシージャを作成し、その中で動的に SQL クエリを作成できます。あなたの手順は次のようになります -

create procedure p1_proc
    @val varchar(250)
as
begin
    declare @sql as varchar(500)
    set @sql = 'Select ID, RoomNum from [dbo].[Mbiology] WHERE LocId IN ('+@val+')'
    exec(@sql)
end

したがって、sqldatasourceこのプロシージャを呼び出します。このようなもの

<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:KuzSQL %>" OnSelecting="DataSourceSelecting"
    SelectCommand="p1_proc" >
    <SelectParameters>
        <asp:Parameter Name="val" />
    </SelectParameters>        
</asp:SqlDataSource>

LocIds をカンマ区切りの文字列として渡すことができます。

SqlDataSource1.SelectParameters["val"].DefaultValue = "5957,5958";
于 2013-11-04T07:02:47.820 に答える