sql数据转换错误

时间:2015-12-29 19:22:15

标签: c# sql sql-server

我要求数据库找到

的值有问题
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时转换失败。”

邮件中标识的行号是我在上面发布的最后一行代码。

3 个答案:

答案 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,则应抛出异常。