2

新しいデータをデータベース (firebird) に渡すために使用するコードがあります。

FbConnection fbCon = new FbConnection(csb.ToString());
FbDataAdapter fbDAdapter = new FbDataAdapter("SELECT ID,name,score FROM players",fbCon);
FbCommandBuilder Cmd = new FbCommandBuilder(fbDAdapter);
DataSet DSet = new DataSet();
fbDAdapter.Fill(DSet);
DataRow rw = DSet.Tables[0].NewRow();
rw["ID"] = zID + 1;
rw["name"] = var;
rw["score"] = score;
DSet.Tables[0].Rows.Add(rw);
fbDAdapter.Update(DSet);

たぶん、より良いアルゴリズムを提案できますか、それともこれはかなり良いですか?

4

2 に答える 2

3

この方法で問題ありません。多くの作業を行うコマンド ビルダーを使用しているため、上記のコードを単純に挿入コマンドに変換して、データベース テーブルで直接実行することができます。

  FbConnection fbCon = new FbConnection(csb.ToString());
  FbCommand fbCom = new FbCommand("INSERT INTO players(ID,name,score) VALUES (@id,@name,@score)", fbCon);
  fbCom.Parameters.AddWithValue("id", zID + 1);
  fbCom.Parameters.AddWithValue("name", var);
  fbCom.Parameters.AddWithValue("score", score);
  fbCom.ExecuteNonQuery();

このようにして、コマンドビルダーを回避し、データをデータテーブルにロードすると、かなり高速になるはずです...

于 2012-05-03T19:50:14.033 に答える
0

これはデータベースのほうが軽いです:

      FbConnectionStringBuilder csb = new FbConnectionStringBuilder( );
      csb.ServerType = FbServerType.Default;
      csb.Database = Settings.Default.LastBDPath;
      csb.Password = Settings.Default.LastBDPassword; //            "masterkey";
      csb.UserID = Settings.Default.LastBDUser;       //            "SYSDBA";
      connection = new FbConnection( csb.ToString( ) );

      connection.Open( ); 

      string scriptLine = string.Format("INSERT INTO TABLE (Id, Name, Score) values ({0}, '{1}', {2}", zId+1, var, score) ; 
      FBCommand command = new FbCommand( scriptline, connection );
      command.ExecuteNonQuery( );

選択の場合:

string sql = string.Format("select * from table where name='{0}';", your_name);

FbCommand command = new FbCommand( sql ), connection );
FbDataReader reader = command.ExecuteReader( );
while ( reader.Read( ) )
{
    for ( int i=0; i<reader.FieldCount; i++ )
    {
         objects[i].Add( reader.GetValue( i ) );
    }
}
于 2012-05-03T19:51:47.120 に答える