为什么我得到错误:Can't转换系统.Int32到系统.字符串,而不是整型

本文关键字:系统 字符串 Int32 整型 转换 错误 Can 为什么 | 更新日期: 2023-09-27 18:11:43

这是我的查询:SELECT fullName FROM userData WHERE userName=?

和我的c#代码:

var con = new SqlConnection();
  var cmd = new SqlCommand();
  var dt = new DataTable();
  con.ConnectionString = @"Data Source=(LocalDB)'MSSQLLocalDB;AttachDbFilename=C:'Users'hugow'Documents'Visual Studio 2015'Projects'OSGS_v2'dataBase.mdf;Integrated Security=True;Connect Timeout=30";
  cmd.Connection = con;
  string cmdText = null;
  string usrName = Request.Cookies["usrData"]["usrName"];
  cmdText = "SELECT fullName FROM userData WHERE userName=" + usrName;
  cmd.CommandText = cmdText;
  con.Open();
  string fullName = (string)cmd.ExecuteScalar();
  nameLabel.Text = fullName;

没什么不好的,对吧?嗯,我得到错误:不能转换系统。Int32到System.String。把它转换成字符串,对吧?好吧,主要问题是:数据("fullName")是一个String从它的起源。

为什么会出现这个错误呢?

提前感谢。

编辑

我忘了在我的代码片段中包含cmd.CommandText = cmdText;,但它已经在我的实际代码中了。

为什么我得到错误:Can't转换系统.Int32到系统.字符串,而不是整型

您缺少将commandText分配给SqlCommand对象

cmd.CommandText = cmdText; 
string fullName = (string)cmd.ExecuteScalar();

首先将cmdText分配给cmd.CommandText

 cmd.CommandText = cmdText; 

然后是ExecuteScalar(),然后使用ToString()方法转换

 var temp = cmd.ExecuteScalar();
 string fullName = temp.ToString();

This,

"SELECT fullName FROM userData WHERE userName=" + usrName;

应为

"SELECT fullName FROM userData WHERE userName='" + usrName + "'"; 

SQL Server认为您的usrNameint,因为您没有将其括在引号中。

还要注意实际的usrName中的单引号。例如,假设您有O'Keefe -您需要转义单个'。你可以把它们叠起来。

比如:

"SELECT fullName FROM userData WHERE userName='" + usrName.replace("'", "''") + "'"; 

解决你的问题的方法已经给出了。要回答为什么会发生这种情况的问题:可以使用(string)和ToString()来强制转换为字符串,但是(string)应用于对象只能将字符串对象转换为字符串。ExecuteScalar是一个Int32对象,所以这不起作用。

参见此处:

转换为string与调用ToString

使用以下代码:

var result= cmd.ExecuteScalar();
if (result!= null) {
    fullName = result.ToString();
}