【问题标题】:Implicit conversion from data type sql_variant to uniqueidentifier is not allowed. Use the CONVERT function to run this query不允许从数据类型 sql_variant 到 uniqueidentifier 的隐式转换。使用 CONVERT 函数运行此查询
【发布时间】:2011-06-25 15:57:04
【问题描述】:

我现在正在使用 Microsoft Visual Web Developer 2010 Express 创建一个网站,我使用了"createUserWizard" 的工具箱。然后我把我的"CustomerInfo" 表的userId 放到"data type=uniqueidentifier" 中,因为我需要将它链接到aspnet_ 表中的用户名。

稍后,我需要将我的"Order" 表链接到"CustomerInfo" 表,所以我将我的orderId data type=uniqueidentifier 放入。然后,我打算将我的订单详细信息插入到"Order" 表中,但我遇到了以下问题:

"从数据类型隐式转换 sql_variant 到 uniqueidentifier 不是 允许。使用 CONVERT 函数 运行此查询”。

我搜索并找到一些答案,例如将参数设置为“空”的数据类型或将其删除。但后来我有这个错误

" 从字符串转换为唯一标识符时转换失败。"

这是我的 SQL

<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" 
                                    DeleteCommand="DELETE FROM [Order] WHERE [orderId] = @orderId" 
                                    InsertCommand="INSERT INTO [Order] ([orderId], [userId], [Services], [PickUpDate], [PickUpTime], [SpecialDate], [SpecialTime]) VALUES (@orderId, @userId, @Services, @PickUpDate, @PickUpTime, @SpecialDate, @SpecialTime)" 
                                    SelectCommand="SELECT * FROM [Order]" 

                                    UpdateCommand="UPDATE [Order] SET [userId] = @userId, [Services] = @Services, [PickUpDate] = @PickUpDate, [PickUpTime] = @PickUpTime, [SpecialDate] = @SpecialDate, [SpecialTime] = @SpecialTime WHERE [orderId] = @orderId">
                                    <DeleteParameters>
                                        <asp:Parameter Name="orderId" Type="Object" />
                                    </DeleteParameters>
                                    <InsertParameters>
                                    <asp:Parameter Name="orderId" Type="Object" />
                                    <asp:Parameter Name="userId" Type="Object" />
                                        <asp:Parameter Name="Services" Type="String" />
                                        <asp:Parameter Name="PickUpDate" Type="String" />
                                        <asp:Parameter Name="PickUpTime" Type="String" />
                                        <asp:Parameter Name="SpecialDate" Type="String" />
                                        <asp:Parameter Name="SpecialTime" Type="String" />
                                    </InsertParameters>
                                    <UpdateParameters>
                                        <asp:Parameter Name="userId" Type="Object" />
                                        <asp:Parameter Name="Services" Type="String" />
                                        <asp:Parameter Name="PickUpDate" Type="String" />
                                        <asp:Parameter Name="PickUpTime" Type="String" />
                                        <asp:Parameter Name="SpecialDate" Type="String" />
                                        <asp:Parameter Name="SpecialTime" Type="String" />
                                        <asp:Parameter Name="orderId" Type="Object" />
                                    </UpdateParameters>
                                </asp:SqlDataSource>

现在想来,可能是我的vb代码有问题。 我就放在这里,请告诉我如何正确的向数据库插入数据。

Protected Sub OrderButton_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles OrderButton.Click
    SqlDataSource1.InsertParameters(0).DefaultValue = Now
    SqlDataSource1.Insert()
    Response.Redirect("~/Customer/AfterOrder.aspx")
End Sub

【问题讨论】:

  • 如果你想让别人告诉你它有什么问题,你需要发布你的 SQL。我们还需要表中列的定义。

标签: asp.net sql-server


【解决方案1】:

如果要从代码中插入 GUID,则应将参数类型设为 GUID

<asp:Parameter Name="ParamName" DbType="Guid" />

您应该将 GUID 值作为 (c#) 传递:

SqlDataSource1.InsertParameters["ParamName"].DefaultValue = System.Guid.NewGuid().ToString();

如果你想传递一个字符串值,你必须像这样在插入查询中使用CONVERT(UNIQUEIDENTIFIER,'YOUR VALUE')

InsertCommand="INSERT INTO [Order] ([UserId], [etc]) 
VALUES (CONVERT(UNIQUEIDENTIFIER,@UserId), @etc)" 

【讨论】:

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