[C#] 使用DbParameter傳遞參數撈SQL Server資料速度異常的慢

  • 18997
  • 0
  • C#
  • 2009-12-24

摘要:使用DbParameter傳遞參數撈SQL Server資料速度異常的慢

操作環境: ,


這問題困擾了我很久
終於找到解決方法

註:以下測試所使用的查詢SQL Command與傳遞的參數是一致的, 測試資料只有100筆

使用DbParameter傳遞參數 (查詢耗費時間: 10分鐘Confused)

DbCommand p_cmd = DbConnection.CreateCommand();
p_cmd.CommandText = strSQL;
p_cmd.CommandType = CommandType.Text;
 
DbParameter p_dbParameter = new DbParameter();
p_dbParameter.DbType = DbType.String;
p_dbParameter.ParameterName = "@value";
p_dbParameter.Value = strValue;
p_dbParameter.Direction = ParameterDirection.Input;
p_cmd.Parameters.Add(p_dbParameter);

 

使用SqlParameter傳遞參數 (查詢耗費時間: 不到1秒)

DbCommand p_cmd = DbConnection.CreateCommand();
p_cmd.CommandText = strSQL;
p_cmd.CommandType = CommandType.Text;
 
SqlParameter p_dbParameter = new SqlParameter();
p_dbParameter.SqlDbType = SqlDbType.VarChar;
p_dbParameter.ParameterName = "@value";
p_dbParameter.Value = strValue;
p_dbParameter.Direction = ParameterDirection.Input;
p_cmd.Parameters.Add(p_dbParameter);

 

另外好奇心驅使下
又多試了DbParameter傳遞參數一次
不過稍微改變一下DbType的值 (查詢耗費時間: 不到1秒)

DbCommand p_cmd = DbConnection.CreateCommand();
p_cmd.CommandText = strSQL;
p_cmd.CommandType = CommandType.Text;
 
DbParameter p_dbParameter = new DbParameter();
p_dbParameter.DbType = DbType.AnsiString;
p_dbParameter.ParameterName = "@value";
p_dbParameter.Value = strValue;
p_dbParameter.Direction = ParameterDirection.Input;
p_cmd.Parameters.Add(p_dbParameter);

 

猜測是因為C#中使用Unicode值無法對應SQL Server中的Varchar值所造成的查詢緩慢(?)


另外這兩篇也可以參考一下

 

 

by sam319