0

こんにちは。助けが必要です。クエリを実行して、取得したすべてのデータをデータセットに入れようとしていますが、このエラーが発生します"cannot implicitly convert type 'int' to 'system.data.dataset'"

コードは次のとおりです。

// this is a small piece of the sql
 String Astra_conn = ConfigurationManager.ConnectionStrings["AstraSeverConnection"].ConnectionString;

System.Text.StringBuilder sql = new System.Text.StringBuilder();

sql.Append(" SELECT ROWNUM AS ID, institution, LPAD (a.zone_name, 3, '0') AS campus, ");
sql.Append(" term_name AS term, student_instance_id AS student_id, subject, course, ");
sql.Append(" section_name AS section_num, offering AS title, ");

//Its OracleConnection because it is an Oracle server otherwise, it would be SqlConnection.

    DataSet rs = new DataSet();
    OracleConnection Astra_db_Conn = new OracleConnection(Astra_conn);
    string myquery = sql.ToString();
    OracleCommand cmd = new OracleCommand(myquery);

Astra_db_Conn.Open();
try
{
    SqlDataAdapter adpt = new SqlDataAdapter();
    rs = cmd.ExecuteNonQuery(); // this is where is get the error.
    adpt.Fill(rs);

}
catch(Exception e) 
{
log.Error("*** ERROR *** IRISExportQueries.loadStudentInfoLearningSites():" + e);

}

私も試してみました

 Astra_db_Conn.Open();
 try
 {
     SqlDataReader reader = new SqlDataAdapter();
     reader = cmd.ExecuteNonQuery(); // this is where is get the error.


 }
 catch(Exception e)
 {
log.Error("*** ERROR *** IRISExportQueries.loadStudentInfoLearningSites():" + e);</pre>

 }

次に、エラーが発生します。"cannot implicitly convert type 'int' to 'System.Data.SqlClient.SqlDataReader'"

あなたの助けに感謝します。

4

3 に答える 3

4

問題は、またはExecuteNonQueryではなく、影響を受ける行の数 (整数) を返すことです。ADO.NET コンポーネントを正しく使用していないようです。DataSetDataReader

これらの 2 行は、DataSet を埋めるのに十分です

SqlDataAdapter adpt = new SqlDataAdapter(cmd);
adpt.Fill(rs);

いずれにせよ、これはあなただけの問題ではありませんSql*。ADO.NET コンポーネントと ADO.NET コンポーネントを混在させてOracle*いるのです。アダプターはOracleDataAdapter

OracleDataAdapter adpt = new OracleDataAdapter(cmd);
adpt.Fill(rs);

他の何か:コマンドに接続を割り当てることは決してありません。やったほうがいい

OracleCommand cmd = new OracleCommand(myquery, Astra_db_Conn);

最後に重要なこととして、インターフェイスを実装するクラスのすべてのインスタンスIDisposableを破棄します。そうしないと、データベースへの接続が解放されないため、管理されていないリソースが解放されます。

これは私の提案をすべて適用した最終バージョンです

var rs = new DataSet();
string myquery = sql.ToString();
using (var Astra_db_Conn = new OracleConnection(Astra_conn))
using (var cmd = new OracleCommand(myquery, Astra_db_Conn))
using (var adpt = new OracleDataAdapter(cmd))
{
    Astra_db_Conn.Open();
    adpt.Fill(rs);
}
于 2013-08-15T01:27:41.740 に答える
1

メソッドExecuteNonQuery()は、コマンドによって影響を受ける行数を int で返します。

クエリからデータにアクセスするには、次の既存の回答が表示されるはずです: Direct method from SQL command text to DataSet

于 2013-08-15T01:29:18.737 に答える
0
SqlDataAdapter adapt= new SqlDataAdapter(cmd.CommandText,cmd.Connection);
adapt.Fill(rs, " Your Table name as it is in database inside this quotation");

次のように、datalist、datatable、または gridview などのデータ ビューにソースを指定できるようになりました。

Datalist1.DataSource= rs.Tables("Your Table name as it is in database inside the above q mark")

今atlast jstはそれをバインドします

Datalist1.DataBind();
于 2013-08-15T02:38:17.213 に答える