2011-06-25 36 views
5

我正在使用Microsoft Visual Web Developer 2010 Express创建一个网站,并使用了"createUserWizard"的工具箱。然后我把我的"CustomerInfo"表的userId添加到"data type=uniqueidentifier",因为我需要将它链接到aspnet_表中的用户名。不允许将数据类型sql_variant隐式转换为uniqueidentifier。使用CONVERT函数运行此查询

后来,我需要链接我的"Order"表到"CustomerInfo"表,所以我把我的orderId data type=uniqueidentifier。于是,我打算插入我的订单详细信息到"Order"表,但我的问题:

“从数据类型隐式转换 SQL_VARIANT到唯一标识符不 允许使用CONVERT函数来 运行此查询。” 。

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

“从字符串转换为uniqueidentifier转换失败。”

这是我的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 
+0

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

回答

7

如果你想从你的代码中插入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)" 
相关问题