我正在尝试从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获取数据并使用它的唯一方法。
答案 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”变量;