-8

私はCsharp言語を使用してCrystal Reportを作成しようとしていますが、このWebサイトでC#を使用してCrystal Replortを作成する方法のレッスンを見つけました

http://www.codeproject.com/Articles/14029/How-to-Create-a-Crystal-Report-using-C-and-MySQL

しかし、コードを理解しようとすると、一部の行とそれを自分のケースに合わせて更新する方法がわかりません

フルボタンコード

private void button2_Click(object sender, EventArgs e)
{
    Mydb mysqlclass = new Mydb();
    mysqlclass.conncting();

    // here is error under fahad.conncting.createcommand();
    MySqlCommand cmd = mysqlclass.connection.CreateCommand();
    cmd.CommandText = "SELECT * FROM admin ";
    mysqlclass.connection.Open();
    MySqlDataAdapter adap = new MySqlDataAdapter(cmd);
    MySqlDataReader dataReader = cmd.ExecuteReader();

    // Create a Dataset and using DataAdapter to fill it 
    adap = new MySqlDataAdapter(); 
    adap.SelectCommand = cmd;
    CustomerDS custDB = new CustomerDS();
    custDB.Clear();
    adap.Fill(custDB, "Customers"); 

    // Create a CrystalReport1 object 
    CrystalReport1 myReport = new CrystalReport1();
    // Set the DataSource of the report 
    myReport.SetDataSource(custDB);
    // Set the Report Source to ReportView 
    crystalReportViewer1.ReportSource = myReport; 
}

それが何を意味するのか、どうすれば自分のケースに合わせて変更できるのか説明してもらえますか、ありがとう

これは私が理解していないことです

CustomerDS custDB = new CustomerDS();
custDB.Clear();
adap.Fill(custDB, "Customers"); 
4

1 に答える 1

1

「現在の接続に関連付けられたオープンリーダーがすでに存在する」という方針に沿って何かを得ていると思いますね。もしそうなら、答えの2番目の部分を参照してください。


これは私が理解していないこと

CustomerDS custDB = new CustomerDS();
custDB.Clear();
adap.Fill(custDB, "Customers"); 

最初の行は簡単で、「型付きデータセット」のように見える新しい空のインスタンスを作成するだけです。これは、顧客と関係があります。この行が私に伝える主なことは、誰かが何らかの理由でまだを使用しているということDataSetです。彼らを憐れんでください-彼らは彼らが何をしているのか分かりません。

2行目は、そのように聞こえます。インテリセンスを参照してください:

すべてのテーブルのすべての行を削除して、System.Data.DataSetからすべてのデータをクリアします。

この行が私に伝える主なことは、それを書いた人は誰でも、それを作成したばかりであり、まだデータが含まれていないことを忘れているということです。

3行目は、データアダプターcustDBを使用して、「Customers」というテーブルのデータを入力します(ただし、以前のコードでは、「admin」というテーブルを実際に参照する非常に特殊なselectコマンドを使用するように指示されていました)。


代わりに、マークされたコードを見ると// here is error...

MySqlCommand cmd = mysqlclass.connection.CreateCommand();
cmd.CommandText = "SELECT * FROM admin ";
mysqlclass.connection.Open();
MySqlDataAdapter adap = new MySqlDataAdapter(cmd);
MySqlDataReader dataReader = cmd.ExecuteReader();

これにより、SQLクエリが実行され、リーダーAPI(行データの前方のみのストリーム)を介して「admin」というテーブルからすべての値が取得されますが、そのリーダーは完全に無視されます。どこにも使用していません。最も注目すべきは、データを消費したり、リーダーを破棄したりすることもありません。これが私に伝える主なことは、作者が彼らが何をしていたかを見失ったということです。そのオープンリーダーは問題を引き起こします。次の行を削除します。

MySqlDataReader dataReader = cmd.ExecuteReader();

また、usingステートメントを調べてください。

于 2012-12-31T07:09:34.803 に答える