我正在执行存储过程但最终出现错误消息:
结果空间不足,无法将uniqueidentifier值转换为char。
myGuid被指定为:
myGuid = Guid.Parse(objOrder.orderId.ToString)
我确保objOrder.orderId的值是一个有效的GUID(包含36个字符)。我甚至尝试过:
Guid.Parse("cc1abb29-9a8d-476a-9046-db417b30d917")
并且
Try
myGuid = New Guid(objOrder.orderId.ToString)
Catch ex As Exception
MsgBox("Error")
End Try
没有错误。
但每当我为myGuid
分配一个新的指南时,例如:
myGuid = Guid.NewGuid()
工作正常。所以它与我的数据库没有关系。我已经尝试比较它们的值/格式(在messageboxes和firebug中,因为我使用的是ASP.NET),但两者是相同的。为什么我的存储过程不接受已解析的GUID但接受新生成的GUID?
这就是我在VB.NET中调用存储过程的方式:
Dim result As String = ""
result = MicrosoftDB.ExecuteScalar(Of String)(
"sp_order_save",
CommandType.StoredProcedure,
GlobalClass.GetConnectionString(),
New SqlParameter("orderId", myGuid),
New SqlParameter("customerId", objOrder.customerId),
New SqlParameter("employeeId", objOrder.employeeId),
New SqlParameter("orderDate", Now.Date),
New SqlParameter("shipName", objOrder.shipName),
New SqlParameter("shipAddress", objOrder.shipAddress),
...
)
我存储过程的变量'数据类型:
@orderId uniqueidentifier
,@customerId bigint
,@employeeId bigint
,@orderDate date
,@shipName varchar(250)
,@shipAddress varchar(250)
,@shipCity varchar(50)
...