来自';的无效强制转换;System.String';到';System.Guid';
本文关键字:System String Guid 转换 无效 来自 | 更新日期: 2023-09-27 18:24:55
我有一个由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
关于我做错了什么,我能得到一些帮助吗?
这里是这行:
cmd.Parameters.Add("@UserId", SqlDbType.UniqueIdentifier).Value = ddlserver.SelectedValue.ToString();
您说它是一个Guid
(或UniqueIdentifier,同一事物的不同名称),并传入一个String
(因为ToString()
,尽管它已经是一个String了)。
将其更改为通过Guid
,如下所示:
cmd.Parameters.Add("@UserId", SqlDbType.UniqueIdentifier).Value = new Guid(ddlserver.SelectedValue.ToString());
试试这个:
cmd.Parameters.Add("@UserId", SqlDbType.UniqueIdentifier).Value = new Guid(ddlserver.SelectedValue.ToString());
不能将字符串强制转换为GUID。您需要使用Guid.Parse()
或Guid.TryParse()
的适当过载来获得您想要的内容。
ddlserver.SelectedValue.ToString();
显然是一个字符串
您将其分配为guid参数:.Add("@UserId", SqlDbType.UniqueIdentifier)
转换为guid,带有:new Guid(ddlserver.SelectedValue.ToString());
问题可能发生在这一行:
cmd.Parameters.Add("@UserId", SqlDbType.UniqueIdentifier).Value = ddlserver.SelectedValue.ToString();
尝试显式创建这样的GUID:
cmd.Parameters.Add("@UserId", SqlDbType.UniqueIdentifier).Value = new System.Guid(ddlserver.SelectedValue.ToString());