-1

リーダーでエラーが発生し続けます。リーダーから単一の値を返すことができるようにしたいだけです。誰か助けてくれませんか?

        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;
4

4 に答える 4

3

あなたは次のようなことをしなければならないでしょう:

string stock = reader.GetString(0);

また

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

それ以外の

string stock = reader;

編集:

GetDouble()代わりに使用GetString()してスキップすることができますConvert.ToDouble()

于 2013-02-28T22:40:50.960 に答える
1

電話してみるExecuteScalar

string stock = (string)comm.ExecuteScalar();
于 2013-02-28T22:41:49.773 に答える
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);
于 2013-02-28T22:51:13.460 に答える
0

あなたのコードはここで壊れていると思います

string stock = reader;

それはできません。実際にリーダーからデータを取得する必要があります。

詳細については、ドキュメントを確認してください

于 2013-02-28T22:38:24.050 に答える