2011-06-25 21 views
5

Tôi đang tạo trang web hiện đang sử dụng Microsoft Visual Web Developer 2010 Express và tôi đã sử dụng hộp công cụ "createUserWizard". Sau đó, tôi đặt userId cho bảng "CustomerInfo" của tôi vào "data type=uniqueidentifier" vì tôi cần liên kết nó với tên người dùng trong bảng aspnet_.Chuyển đổi ngầm định từ kiểu dữ liệu sql_variant thành uniqueidentifier không được phép. Sử dụng hàm CONVERT để chạy truy vấn này

Sau đó, tôi cần liên kết bảng "Order" của mình với bảng "CustomerInfo" để tôi đặt orderId data type=uniqueidentifier của mình. Sau đó, tôi có kế hoạch chèn chi tiết đơn hàng của tôi vào bảng "Order" nhưng tôi có vấn đề:

"chuyển đổi ngầm từ kiểu dữ liệu sql_variant để uniqueidentifier không phải là phép Sử dụng chức năng CONVERT để chạy truy vấn này." .

Tôi tìm kiếm và tìm một số câu trả lời như kiểu dữ liệu của tham số được đặt thành "Rỗng" hoặc xóa nó. nhưng sau đó tôi có lỗi này

"Chuyển đổi không thành công khi chuyển đổi từ chuỗi ký tự thành uniqueidentifier".

Đây là 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> 

của tôi Bây giờ tôi nghĩ về nó, có thể có một vấn đề với mã của tôi trong vb. Tôi sẽ đặt nó ở đây, hãy cho tôi biết cách làm đúng cách để chèn dữ liệu vào cơ sở dữ liệu.

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

Bạn cần đăng câu lệnh SQL của mình nếu bạn muốn ai đó cho bạn biết có gì sai với nó. Chúng tôi cũng sẽ cần định nghĩa về các cột trong bảng của bạn. –

Trả lời

7

Nếu bạn muốn chèn GUID từ mã của bạn, bạn nên thực hiện kiểu tham số GUID

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

Và bạn nên vượt qua giá trị GUID như (C#):

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

Nếu bạn muốn chuyển giá trị chuỗi, bạn phải sử dụng CONVERT (UNIQUEIDENTIFIER, 'GIÁ TRỊ CỦA BẠN') trong truy vấn chèn như sau:

InsertCommand="INSERT INTO [Order] ([UserId], [etc]) 
VALUES (CONVERT(UNIQUEIDENTIFIER,@UserId), @etc)" 
Các vấn đề liên quan