0

私はmssql2012サーバーを持っており、この関数を使用して追加/記録します。

static String conString = "Provider=SQLOLEDB;Data Source = " + ecommerceServer + "; Initial Catalog = " + eCommercedbName + "; User Id = " + eCommerceUsername + "; Password = " + eCommercepassword + ";";

    public bool InsertSQL(String query, String Tablename)
    {
        OleDbConnection conn = new OleDbConnection(conString);
        try
        {
            conn.Open();
            OleDbCommand command = new OleDbCommand(query, conn);
            int count = command.ExecuteNonQuery();
            return (count > 0) ? true : false;
        }
        catch
        {
            if (conn.State.ToString() == "Open")
            {
                conn.Close();
            }
        }
        return false;
    }

関数は非常に遅いです(たとえば、MySQLで同様の実行があり、はるかに高速に動作しました。より高速な方法はありますOleDbか?

4

2 に答える 2

1

パフォーマンスが気になる場合は、SqlBulkCopyをご覧ください。

これが(VB.Netの)例で、関連する速度の向上がわかります

于 2012-08-07T18:27:43.440 に答える
0

以下のアンドリューは、クエリで SQL クライアントとトランザクションを実行する方法の例です。これをガイド/学習例として使用して、現在の例に合わせて変数を置き換えることもできます。また、削除できるトランザクション コードが必要ない場合は、app.config ファイルから接続文字列をどのように読み取っているのかにも注意してください。

 private void SomeMethod()
 {
    SqlCommand sqlcmd = new SqlCommand();
    using (SqlConnection sqlConn = new SqlConnection(ConfigurationSettings.AppSettings["strConnectionString"]))//strConnectionString
    {
       sqlConn.Open();
       sqlcmd.Connection = sqlConn;
       SqlTransaction transaction;
       // Start a local transaction.
       transaction = sqlConn.BeginTransaction("DeleteRecs");
       sqlcmd.Transaction = transaction;
       sqlcmd.CommandTimeout = 60;
       sqlcmd.CommandText = "uf_DeleteWeeks";
       sqlcmd.CommandType = System.Data.CommandType.StoredProcedure;
       try
       {
          sqlcmd.ExecuteNonQuery();
          sqlcmd.Transaction.Commit();
       }
       catch (SqlException sqle)
       {

        try
        {
           transaction.Rollback("DeleteRecs");
        }
        catch (Exception ex)
        {

        }
       Console.WriteLine(sqle.Message);
       }
      }
      ((IDisposable)sqlcmd).Dispose();
   }
于 2012-08-07T18:14:16.663 に答える