2013-02-28 2 views
-1

Я продолжаю получать ошибку для читателя. Я просто хочу иметь возможность вернуть единственное значение от читателя. Кто-нибудь может мне помочь, пожалуйста!Невозможно неявно преобразовать тип 'System.Data.Common.DbDataReader' в 'string'

 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; 

Edi т:

Вы можете использовать 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); 
Смежные вопросы