我要求数据库找到
的值有问题string locationCode = Server.UrlDecode(Request["locationCode"].ToString().Trim());
string ID = Server.UrlDecode(Request["id"].ToString().Trim());
SqlConnection myConnection = new SqlConnection(System.Configuration.ConfigurationManager.AppSettings["MyAccounts"]);
try
{
myConnection.Open();
SqlCommand getEstC = new SqlCommand("SELECT COUNT(EstablishmentCode) FROM Establishments WHERE EstablishmentCode = " + locationCode + " AND ID <> " + ID, myConnection);
estCount = (Int32)getEstC.ExecuteScalar();
我认为ID作为字符串的值有问题,但在数据库中它是一个int。我认为sql会处理转换,但显然不是。主要错误消息是:
“System.Data.SqlClient.SqlException(0x80131904):将nvarchar值'PRU1'转换为数据类型int时转换失败。”
邮件中标识的行号是我在上面发布的最后一行代码。
答案 0 :(得分:3)
尝试使用参数化查询,不仅有助于防止SQL注入,还有助于引用和转义字符。
在你的情况下:
&#34; System.Data.SqlClient.SqlException(0x80131904):转换失败 当转换nvarchar值时,PRU1&#39;到数据类型int。&#34;
你得到错误是因为省略了引号而SQL服务器将其视为INT,因此无法将PRU1
转换为int。
您永远不应该像这样构建查询,而是要准备语句。
string locationCode = Server.UrlDecode(Request["locationCode"].ToString().Trim());
string ID = Server.UrlDecode(Request["id"].ToString().Trim());
using (SqlConnection con = new SqlConnection(
System.Configuration.ConfigurationManager.AppSettings["MyAccounts"]))
{
con.Open();
using (var cmd = new SqlCommand(
@"SELECT COUNT(EstablishmentCode)
FROM Establishments
WHERE EstablishmentCode = @locationCode AND ID <> @ID",
con))
{
cmd.Parameters.AddWithValue("@locationCode", locationCode);
cmd.Parameters.AddWithValue("@ID", ID);
Int32 count = Convert.ToInt32(cmd.ExecuteScalar());
}
}
建议明确使用类型转换:
cmd.Parameters.Add("@locationCode", SqlDbType.VarChar).Value = locationCode;
cmd.Parameters.Add("@ID", SqlDbType.Int).Value = ID;
答案 1 :(得分:0)
您必须比较相同数据类型的数据。如果您的ID列是Int类型,那么您必须传入Int而不是字符串,因为它将把它视为varchar
答案 2 :(得分:0)
我猜你传递的字符串在某些时候无法转换为int。确保,尝试添加类似的东西:
<?php
class Years
{
private $divid;
// although this is
public function __construct($div)
{
$this->divid = $div;
}
public function calc($ag,$hr)
{
return ($ag * $hr) / $this->divid;
}
}
if( isset($_POST['sub'], $_POST['age'], $_POST['hrs'], $_POST['name']) ){
$name=$_POST['name'];
$age=$_POST['age'];
$hrs=$_POST['hrs'];
$yrs = new Years(24);
$result = $yrs->calc($age,$hrs)
echo "The result is $result";
} else {
?>
<!DOCTYPE html>
<html>
<head>
<title>Form</title>
</head>
<body>
<h1>My Unconcious Life</h1>
<form method="post">
Your Name:<br />
<input type="text" name="name" /><br />
Your Age:<br />
<input type="text" name="age" /><br />
Hours slept per night:<br />
<input type="text" name="hrs" /><br />
<input type="submit" name="sub" value="Calculate" />
</form>
</body>
</html>
<?php
}
?>
?>
如果您的字符串无法转换为int,则应抛出异常。