SQL 查询引发错误"无法将参数值从 Guid 转换为字符串"



我正在尝试获取用户名并将其放入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并调用String(((因为该值很可能是一个对象(,例如:

sqlcomm.Parameters.Add("@id", SqlDbType.NVarChar, UserID.ToString());

如果你只打算返回一个结果,也许使用 ExecuteScalar((

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 .
}
}
}

最新更新