【问题标题】:Implicit conversion from data type sql_variant to varbinary(max) is not allowed. Use the CONVERT function to run this query. ASP.NET SQL DataSource不允许从数据类型 sql_variant 到 varbinary(max) 的隐式转换。使用 CONVERT 函数运行此查询。 ASP.NET SQL 数据源
【发布时间】:2017-10-23 00:05:34
【问题描述】:

虽然这个标题有很多问题,但我的问题不同。

我正在使用绑定到 sql 数据源控件的 ASP.NET ListView,因此没有添加任何转换。我也在 ListView 的插入事件中发送 DBNull 值。

数据源代码:

  <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:Main %>"  InsertCommand="pInsert" InsertCommandType="StoredProcedure" 
    SelectCommand="pGet" SelectCommandType="StoredProcedure"   >
            <DeleteParameters>
                <asp:Parameter Name="Code" Type="Int32" />
            </DeleteParameters>
            <InsertParameters>
                <asp:SessionParameter Name="SubscriptionCode" SessionField="EntryCode" Type="Int32" DefaultValue="-1" />
                <asp:Parameter Name="Attachment" Type="Object" />

            </InsertParameters>
            <SelectParameters>                
                <asp:SessionParameter Name="SubscriptionCode" SessionField="EntryCode" Type="Int32" DefaultValue="-1" />
                <asp:Parameter DefaultValue="false" Name="ForEdit" Type="Boolean" />
            </SelectParameters>           
        </asp:SqlDataSource>

背后的代码:

protected void lv_ItemInserting(object sender, ListViewInsertEventArgs e)
        {           
            e.Values["Attachment"] = DBNull.Value;
        }   

我也尝试删除Type="Object" 指定的here 属性

【问题讨论】:

    标签: c# sql asp.net sql-server


    【解决方案1】:

    从这一行 &lt;asp:Parameter Name="Attachment" Type="Object" /&gt; 中删除 Type="Object" 属性并在后面的代码中尝试:

    protected void lv_ItemInserting(object sender, ListViewInsertEventArgs e)
    {
       e.Values["Attachment"] = System.Data.SqlTypes.SqlBinary.Null;
    }
    

    【讨论】:

    • 两种解决方案都有效,但我会将其标记为答案,因为 -1 占用空间并且在数据库中不为空。谢谢。
    【解决方案2】:

    这是另一种解决方案。试试下面的代码吧。

    数据源代码:

    <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:Main %>"  InsertCommand="pInsert" InsertCommandType="StoredProcedure" 
    SelectCommand="pGet" SelectCommandType="StoredProcedure"   >
        <DeleteParameters>
            <asp:Parameter Name="Code" Type="Int32" />
        </DeleteParameters>
        <InsertParameters>
            <asp:SessionParameter Name="SubscriptionCode" SessionField="EntryCode" Type="Int32" DefaultValue="-1" />
            <asp:Parameter Name="Attachment" />
    
        </InsertParameters>
        <SelectParameters>                
            <asp:SessionParameter Name="SubscriptionCode" SessionField="EntryCode" Type="Int32" DefaultValue="-1" />
            <asp:Parameter DefaultValue="false" Name="ForEdit" Type="Boolean" />
        </SelectParameters>           
    </asp:SqlDataSource>
    

    背后的代码:

    protected void lv_ItemInserting(object sender, ListViewInsertEventArgs e)
    {
       e.Values["Attachment"] = -1;
    }
    

    【讨论】:

      猜你喜欢
      • 2018-06-07
      • 1970-01-01
      • 1970-01-01
      • 2018-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多