SQLDataReader是否比使用命令行实用程序sqlcmd慢?

时间:2010-05-14 00:28:09

标签: sqldatareader sqlcmd

我最近向一位同事提倡我们将一些使用sqlcmd命令行实用程序的C#代码替换为SqlDataReader。旧代码使用: System.Diagnostics.ProcessStartInfo procStartInfo = new System.Diagnostics.ProcessStartInfo(“cmd”,“/ c”+ sqlCmd); sherCmd是这样的 “sqlcmd -S”+ serverName +“ - y 0 -h-1 -Q”+“\”“+”USE [“+ database +”]“+”; + txtQuery.Text +“\”“; \ < / p>

然后使用正则表达式解析结果。我认为使用SQLDataReader会更符合行业惯例,更容易调试和维护,并且可能更快。但是,SQLDataReader方法至少具有相同的速度,并且可能更慢。我相信我正在使用SQLDataReader做正确的事情。代码是:

using (SqlConnection connection =
         new SqlConnection())
        {
            try
            {
                SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(connectionString);
                connection.ConnectionString = builder.ToString(); ;
                SqlCommand command =
                    new SqlCommand(queryString, connection);

                connection.Open();



                SqlDataReader reader = command.ExecuteReader();

    // do stuff w/ reader 
                reader.Close();

            }
            catch (Exception ex)
            {
                outputMessage += (ex.Message);
            }
        } 

我使用System.Diagnostics.Stopwatch来计算两种方法,命令行实用程序(从C#代码调用)似乎更快(20-40%?)。 SqlDataReader有一个简洁的功能,当再次调用相同的代码时,它会快速闪亮,但对于这个应用程序,我们没有预料到这一点。

我已经对这个问题做了一些研究。我注意到命令行实用程序sqlcmd使用OLE DB技术来命中数据库。这比ADO.NET快吗?我真的很惊讶,特别是因为命令行实用程序方法涉及启动进程。我真的觉得它会慢一点。

有什么想法吗?

谢谢, 戴夫

1 个答案:

答案 0 :(得分:0)

我认为SqlDataReader比sqlcmd慢,因为使SqlDataReader不仅可以获取数据,还可以获取数据库模式信息,而sqlcmd只获取数据。 您可以使用如下所示的datareader获取列名称:

for (int i = 0; i < reader.FieldCount; i++)
{
    Console.WriteLine(reader.GetName(i));
}

有时性能并不重要,安全性更重要。 但我不知道哪个更安全,也许是SqlDataReader。

我是中国人,所以也许我的语言对于语法不正确,抱歉。