2013-02-28 127 views
-1

我不断收到读者的错误。我只想要能够从阅读器中返回单个值。谁能帮帮我吗?不能将类型'System.Data.Common.DbDataReader'隐式转换为'字符串'

 DbProviderFactory factory = DbProviderFactories.GetFactory("System.Data.SqlClient"); 

     DbConnection conn = factory.CreateConnection(); 

     conn.ConnectionString = ConfigurationManager.ConnectionStrings["CompanyConnection"].ConnectionString; 

     DbCommand comm = conn.CreateCommand(); 
     comm.CommandText = "getStockPrice"; 
     comm.CommandType = CommandType.StoredProcedure; 

     DbParameter param = comm.CreateParameter(); 
     param.ParameterName = "@company"; 
     param.Value = CompanyName; 
     param.DbType = DbType.String; 
     comm.Parameters.Add(param); 
     conn.Open(); 

     DbDataReader reader = comm.ExecuteReader(); 
     string stock = reader; 
     reader.Close(); 
     conn.Close(); 
     return Convert.ToDouble(stock); 

这是存储过程:

 @company varchar(50) 
    AS 
Select stockPrice From Company_t 
where companyName = @company; 

回答

0

我觉得你的代码是在这里打破

string stock = reader; 

你不能做到这一点,你必须真正得到从数据读者。

检查Documentation了解更多信息

3

你将不得不做这样的事情:

string stock = reader.GetString(0); 

string stock = reader.GetString(reader.GetOrdinal("stockPrice")); 

,而不是

string stock = reader; 

艾迪T:

你可以使用GetDouble()代替GetString()和跳过Convert.ToDouble()

1

尝试调用ExecuteScalar

string stock = (string)comm.ExecuteScalar(); 
0

你不能直接访问DataReader数据不读它。即使您的查询没有返回任何数据,该方法也不会破坏您的代码。

DbDataReader reader = comm.ExecuteReader(); 
string stock = "0"; 

while (reader.Read()) 
{ 
    // get the results of each column 
    stock = reader["stockprice"].ToString(); 
    break; 
} 
reader.Close(); 
conn.Close(); 
return Convert.ToDouble(stock); 
相关问题