C# 来自'的无效强制转换;System.String';至';System.Guid';

C# 来自'的无效强制转换;System.String';至';System.Guid';,c#,asp.net,C#,Asp.net,我有一个由DropDownList控件组成的提交表单;它的列表项值由唯一标识符组成,例如524988aa-0594-4ebe-b7fa-61396855e17f 我试图通过存储过程将ListItem的值插入数据库中的表中,但在提交时出现“从'System.String'转换为'System.Guid'无效”错误 超文本: <asp:DropDownList ID="ddlserver" runat="server"> <asp:ListItem Text="Serve

我有一个由DropDownList控件组成的提交表单;它的列表项值由唯一标识符组成,例如524988aa-0594-4ebe-b7fa-61396855e17f

我试图通过存储过程将ListItem的值插入数据库中的表中,但在提交时出现“从'System.String'转换为'System.Guid'无效”错误

超文本:

 <asp:DropDownList ID="ddlserver" runat="server">
    <asp:ListItem Text="Server 1" Value="88dc9e7d-0904-4a49-a6d9-8d0badfc4d0b" />
    <asp:ListItem Text="Server 2" Value="524988aa-0594-4ebe-b7fa-61396855e17f" />
 </asp:DropDownList> 
存储过程:

ALTER PROCEDURE [dbo].[InsertClient]

    @UserId UniqueIdentifier,
    @ClientName nvarchar(150),
    @EmailAddress nvarchar(150),
    @PhoneNumber nvarchar(50),
    @ServicesNum nvarchar(50)

AS
BEGIN
    SET NOCOUNT ON;
    INSERT INTO  Client_tb (UserId, ClientName, EmailAddress, PhoneNumber, ServicesNum)
    VALUES (@UserId, @ClientName,  @EmailAddress, @PhoneNumber, @ServicesNum) 
END
…关于我做错了什么,请给我一些帮助好吗?

试试这个:

cmd.Parameters.Add("@UserId", SqlDbType.UniqueIdentifier).Value = new Guid(ddlserver.SelectedValue.ToString());

ddlserver.SelectedValue.ToString()显然是一个字符串
将其分配为guid参数:
.Add(“@UserId”,SqlDbType.UniqueIdentifier)
强制转换为guid,使用:
新guid(ddlserver.SelectedValue.ToString())

这里是这一行:

cmd.Parameters.Add("@UserId", SqlDbType.UniqueIdentifier).Value = ddlserver.SelectedValue.ToString();
您说它是一个
Guid
(或者UniqueIdentifier,同一事物的不同名称)并传入一个
字符串(因为
ToString()
,尽管它已经是一个字符串)

将其更改为传递一个
Guid
,如下所示:

cmd.Parameters.Add("@UserId", SqlDbType.UniqueIdentifier).Value = new Guid(ddlserver.SelectedValue.ToString());
cmd.Parameters.Add("@UserId", SqlDbType.UniqueIdentifier).Value = new System.Guid(ddlserver.SelectedValue.ToString());

不能将字符串强制转换为GUID。您需要使用
Guid.Parse()
Guid.TryParse()
的适当重载来获取所需内容。

此行中可能出现问题:

cmd.Parameters.Add("@UserId", SqlDbType.UniqueIdentifier).Value = ddlserver.SelectedValue.ToString();
尝试显式创建GUID,如下所示:

cmd.Parameters.Add("@UserId", SqlDbType.UniqueIdentifier).Value = new Guid(ddlserver.SelectedValue.ToString());
cmd.Parameters.Add("@UserId", SqlDbType.UniqueIdentifier).Value = new System.Guid(ddlserver.SelectedValue.ToString());

您的问题是,
@UserId
被定义为一个
UniqueIdentifier
,您正试图传入一个字符串。将字符串转换为新的
Guid()
对象,然后将该Guid对象指定为
.Value
或仅
新Guid(字符串)