从'System.String'到'System.Guid'的转换无效

时间:2014-09-29 17:07:40

标签: c# asp.net

我有一个由DropDownList控件组成的提交表单;它的ListItem值由一个UniqueIdentifier组成,例如: 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> 

代码背后:

SqlCommand cmd = new SqlCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "InsertClient";
cmd.Parameters.Add("@UserId", SqlDbType.UniqueIdentifier).Value = ddlserver.SelectedValue.ToString();
cmd.Parameters.Add("@ClientName", SqlDbType.NVarChar).Value = txtName.Text;
cmd.Parameters.Add("@EmailAddress", SqlDbType.NVarChar).Value = txtEmail.Text;
cmd.Parameters.Add("@PhoneNumber", SqlDbType.NVarChar).Value = txtPhone.Text;
cmd.Parameters.Add("@ServicesNum", SqlDbType.NVarChar).Value = rbzero.Text;
cmd.Connection = con;

存储过程:

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

...我可以得到一些帮助,请问我做错了什么?

5 个答案:

答案 0 :(得分:5)

这一行在这里:

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

你说它是Guid(或UniqueIdentifier,同一事物的不同名称)并传入String(因为ToString(),虽然它已经是无论如何都是一个字符串。)

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

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

答案 1 :(得分:1)

试试这个:

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

答案 2 :(得分:1)

您无法字符串转换为GUID。您需要使用Guid.Parse()Guid.TryParse()的适当重载来获得所需内容。

答案 3 :(得分:0)

ddlserver.SelectedValue.ToString();显然是一个字符串
您将其指定为guid参数:.Add("@UserId", SqlDbType.UniqueIdentifier) 使用new Guid(ddlserver.SelectedValue.ToString());

投射到guid

答案 4 :(得分:0)

问题很可能发生在这一行:

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

尝试显式创建这样的GUID:

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