operation'*'不能应用于'int'类型的操作数和'System.Data.SqlClient.SqlCommand'

时间:2014-01-23 10:57:06

标签: c# sql azure

我正在尝试从sql azure中的表调用值,因此我在我的webservice和我的sql azure之间建立了连接。我在web.config中添加了一个连接字符串来建立连接

<connectionStrings>
 <add name="ConnectionString"connectionString="Server=tcp:vvigan1a71.database.windows.net,1433;Database=(myname);User  ID=(myid);Password=(myownpassword);Trusted_Connection=False;Encrypt=True;" />
</connectionStrings>

然后我尝试通过我的web服务文件中的connectionstring链接azure。

SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);

我添加了一个datareader来读取我的sql azure中的数据并调用该值并使用它如下所示

public double CarTaxwithOMV(int carValue)
    {

        SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
        con.Open();
        SqlCommand taxafter30k = new SqlCommand("Select taxafter30k from TaxValue");
        SqlCommand taxafter50k = new SqlCommand("Select taxafter50k from TaxValue");
        SqlDataReader dr;

        dr = taxafter30k.ExecuteReader();
        dr = taxafter50k.ExecuteReader();

        if (dr.Read())
        {
            double totalcartaxOMV = 0d;

            if (carValue <= 20000)
            {
                totalcartaxOMV = carValue;
            }
            else if (carValue > 20000 && carValue <= 50000)
            {
                totalcartaxOMV = ((20000 + ((carValue - 20000) * taxafter30k)));
            }
            else if (carValue > 50000)
            {
                totalcartaxOMV = (20000 + 42000 + ((carValue - 50000) * taxafter50k));
            }
            con.Close();
            return totalcartaxOMV;
        }
    }

然而,在我的

totalcartaxOMV = ((20000 + ((carValue - 20000) * taxafter30k)));

我收到此错误

operation '*' cannot be applied to operand of type 'int' and 'System.Data.SqlClient.SqlCommand'

不幸的是,这似乎是连接和从我的sql azure获取数据并使用它的唯一方法。

4 个答案:

答案 0 :(得分:1)

你不能使用taxafter30k,它是一个SqlCommand

您的代码应为

 totalcartaxOMV = ((20000 + ((carValue - 20000) * Convert.ToDouble(
 dr["taxafter30k"])));

或替换为

    SqlCommand taxafter30k = new SqlCommand("Select taxafter30k from TaxValue");
    SqlCommand taxafter50k = new SqlCommand("Select taxafter50k from TaxValue");
    SqlDataReader dr;

    double taxafter30kNew = Convert.ToDouble(taxafter30k.ExecuteScalar());
    double taxafter30kNew = Convert.ToDouble(taxafter50k.ExecuteScalar());


        double totalcartaxOMV = 0d;

        if (carValue <= 20000)
        {
            totalcartaxOMV = carValue;
        }
        else if (carValue > 20000 && carValue <= 50000)
        {
            totalcartaxOMV = ((20000 + ((carValue - 20000) * taxafter30kNew)));
        }
        else if (carValue > 50000)
        {
            totalcartaxOMV = (20000 + 42000 + ((carValue - 50000) * taxafter50kNew));
        }
        con.Close();
        return totalcartaxOMV;

答案 1 :(得分:0)

您需要将taxafter30k更改为

(double)dr["taxafter30k"]

答案 2 :(得分:0)

这一行:

dr = taxafter30k.ExecuteReader();

将返回您必须导航的结果集,而不是单个结果。 使用Intellisense,您应该能够轻松找到所需的方法或恢复到另一种执行方法。

对于单个标量结果,请使用:

dr = taxafter30k.ExecuteScalar();

您必须相应调整查询。

答案 3 :(得分:0)

“taxafter30k”是一个SQLDataReader。 您需要从SQLDataReader中检索值(假设它是一个int):

int tax = 0;
if( taxafer30k.Read() )
{
   tax = taxafter30k.GetInt32(0);
}

然后在计算中使用“tax”变量;