Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 有没有替代OleDb的方法来提高性能?_C#_Sql Server_Winforms - Fatal编程技术网

C# 有没有替代OleDb的方法来提高性能?

C# 有没有替代OleDb的方法来提高性能?,c#,sql-server,winforms,C#,Sql Server,Winforms,我有一台ms sql 2012服务器,我使用此功能添加/记录: static String conString = "Provider=SQLOLEDB;Data Source = " + ecommerceServer + "; Initial Catalog = " + eCommercedbName + "; User Id = " + eCommerceUsername + "; Password = " + eCommercepassword + ";"; public bo

我有一台ms sql 2012服务器,我使用此功能添加/记录:

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更快的方法?

下面的Andrew是一个示例,说明了如何在查询中创建SQL客户端以及执行事务。您可以将此作为一个指南/学习示例,也可以替换变量以适合当前的示例。另请注意e我如何从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();
   }

如果您关心它的性能,请看一看


举一个例子(在VB.Net中),让您了解所涉及的速度提高。

试试看。另外,您希望将连接集中在一起,而不是为每个查询连接。并考虑在using(){}周围应用/包装您的SQLConnection第条将连接字符串输入app.config文件。我将通过一个示例说明您的代码应该是什么样的。另外,不要使用硬编码的SQL命令…避免SQL注入。Andrew这应该足以让您开始使用。如果您有任何问题,请毫不犹豫地询问。如果事情继续缓慢运行,请查看你的问题,还记得@Forcey suggestion,使用连接池继续打开和关闭连接是不好的。他在使用C#…你的答案与你发布的关于OP问题的内容无关。@DJ KRAZE:是的,我知道他在使用C#,这就是我在帖子中提到的原因。但是我的答案怎么不相关呢对于OP的qeustion?他特别询问了关于提高性能的问题。此外,MSDN链接包含C#示例代码,因此我不确定您的观点到底是什么。Bic您的示例似乎没有解决他的问题。也许我在这里遗漏了一些东西,但根据他的问题和您的回答,它似乎不适用于他的初始代码ws..由OP来澄清他的问题是这样的,其他人不会像我一样认为。Bic也有基于代码的InsertSQL,人们不能将他的代码解释为批量插入。与一个名为insert的语句相比。@DJ KRAZE:是的,这是一个公平的观点。根据我的经验,一个insert语句不会导致性能问题。唯一的scenario我能想到的是大量的二进制转储或类似的。所以我假设发布的方法被多次调用。但是你是对的,我没有足够的信息来支持它。也许OP可以在这方面进行扩展。