不允许从数据类型sql_variant到varbinary(max)的隐式转换。使用CONVERT函数运行此查询。 ASP.NET SQL数据源

时间:2017-10-22 13:35:19

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

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

我正在使用绑定到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;
        }   

我还尝试删除指定here

Type="Object"属性

2 个答案:

答案 0 :(得分:1)

从此行Type="Object"中删除<asp:Parameter Name="Attachment" Type="Object" />属性并在后面的代码中尝试此操作:

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

答案 1 :(得分:1)

这是另一种解决方案。只需尝试以下代码即可。

数据源代码:

<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;
}
相关问题