为什么我得到错误: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;
,但它已经在我的实际代码中了。
您缺少将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认为您的usrName
是int
,因为您没有将其括在引号中。
还要注意实际的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();
}