C# SQL查询抛出错误“;无法将参数值从Guid转换为字符串';
我试图获取用户名并将其放入C# SQL查询抛出错误“;无法将参数值从Guid转换为字符串';,c#,asp.net-core,C#,Asp.net Core,我试图获取用户名并将其放入TempData中,但当代码到达ExecuteReader()方法时,我收到一个错误 这是我的查询代码: var InvoiceId = TempData["newinvoice"]; TempData["invoiceid"] = InvoiceId; var UserID = TempData["UserID"]; string connection = "Data Source=.;Initi
TempData
中,但当代码到达ExecuteReader()
方法时,我收到一个错误
这是我的查询代码:
var InvoiceId = TempData["newinvoice"];
TempData["invoiceid"] = InvoiceId;
var UserID = TempData["UserID"];
string connection = "Data Source=.;Initial Catalog=project;Integrated Security=true;";
using (SqlConnection sqlconn = new SqlConnection(connection))
{
using (SqlCommand sqlcomm = new SqlCommand("SELECT UserName FROM AspNetUsers WHERE Id = @id"))
{
sqlcomm.Parameters.Add("@id", SqlDbType.VarChar).Value = UserID;
using (SqlDataAdapter sda = new SqlDataAdapter())
{
sqlcomm.Connection = sqlconn;
sqlconn.Open();
sda.SelectCommand = sqlcomm;
SqlDataReader sdr = sqlcomm.ExecuteReader();
while (sdr.Read())
{
TempData["UserId"] = sdr["UserName"];
}
}
}
}
TempData[“UserID”]
中的用户Id是nvarchar(450)
而不是整数。我不知道为什么会发生这种异常-有什么帮助吗
注意:以下是我的一个用户ID的示例:
'aa776084-053e-452c-8b0d-b445cdbf457d'
看起来您的id是,如果是,我建议您更改数据库和代码以使用GUID 但是,要解决您的问题,您应该能够传入UserId并调用toString()(因为该值很可能是一个对象),例如: 如果只返回一个结果,可以使用
数据库中
Id
的类型是什么?我建议在所有声明中使用类型而不是var
。这将使代码更易于阅读和调试,甚至可能在查询数据库之前向您显示错误所在@OriginTempData[string]
返回一个对象
,因此将var
更改为object
在这种情况下没有帮助。也就是说,如果UserId的类型是System.Guid,并且您的数据库字段实际上是UniqueIdentifier,那么您应该使用SqlDbType.UniqueIdentifier)。Value=UserId
。如果字段是UniqueIdentifier,UserId是字符串,则使用SqlDbType.UniqueIdentifier.Value=Guid.Parse(UserId)
。这完全取决于事物的实际类型。您关于TempData是nvarchar的说法是完全错误的,因为我们不知道用户ID的类型,所以很难猜测。但这些都是可能的组合,所以我建议尝试所有组合,直到其中一个有效。如果Guid.Parse抛出一个错误字符串
sqlcomm.Parameters.Add("@id", SqlDbType.NVarChar, UserID.ToString());
using (SqlConnection sqlconn = new SqlConnection(connection))
{
using (SqlCommand sqlcomm = new SqlCommand("SELECT TOP 1 UserName from AspNetUsers where Id=@id", sqlconn)
{
sqlcomm.Parameters.Add("@id", SqlDbType.NVarChar, UserID.ToString());
object result = sqlcomm.ExecuteScalar();
if (result != null)
{
TempData["UserId"] = result.ToString(); // It looks like you're mixing UserId & UserName .
}
}
}