摘要:使用DbParameter傳遞參數撈SQL Server資料速度異常的慢
這問題困擾了我很久
終於找到解決方法
註:以下測試所使用的查詢SQL Command與傳遞的參數是一致的, 測試資料只有100筆
使用DbParameter傳遞參數 (查詢耗費時間: 10分鐘)
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