2013-02-28 67 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); 
相關問題