经验分享:实例化SqlParameter时,如果是字符型,一定要指定size属性
以前在实例化SqlParameter时,通常都是用下面的语句,没有设置size属性:
new SqlParameter("@name", SqlDbType.Varchar) { Value = name };
string sql = "select top 1 * from tb where name = @o";var para = new SqlParameter("@o", SqlDbType.VarChar) {Value = "ab"};SqlHelper.ExecuteReader(ReadConnectionString, CommandType.Text, sql, para);
exec sp_executesql N'select top 1 * from tb where name = @o',N'@o nvarchar(2)',@o=N'ab'
exec sp_executesql N'select top 1 * from tb where name = @o',N'@o nvarchar(4)',@o=N'abcd'
--先清空执行计划缓存DBCC FREESYSTEMCACHE ('ALL')DBCC FREEPROCCACHEGOSELECT * FROM sys.dm_exec_cached_plans WHERE cacheobjtype = 'Compiled Plan'GOexec sp_executesql N'select top 1 * from tb where name = @o',N'@o nvarchar(2)',@o=N'ab'GOSELECT * FROM sys.dm_exec_cached_plans WHERE cacheobjtype = 'Compiled Plan'GOexec sp_executesql N'select top 1 * from tb where name = @o',N'@o nvarchar(4)',@o=N'abcd'GOSELECT * FROM sys.dm_exec_cached_plans WHERE cacheobjtype = 'Compiled Plan'GO
new SqlParameter("@name", SqlDbType.Varchar, 4000) { Value = name };
分享必属极品,感谢楼主分享。
[解决办法]
学无止境
[解决办法]
受教了
[解决办法]
SELECT est.text AS batchtext, SUBSTRING(est.text, (eqs.statement_start_offset/2)+1, (CASE eqs.statement_end_offset WHEN -1 THEN DATALENGTH(est.text) ELSE eqs.statement_end_offset END - ((eqs.statement_start_offset/2) + 1))) AS querytext, eqs.creation_time, eqs.last_execution_time, eqs.execution_count, eqs.total_worker_time, eqs.last_worker_time, eqs.min_worker_time, eqs.max_worker_time, eqs.total_physical_reads, eqs.last_physical_reads, eqs.min_physical_reads, eqs.max_physical_reads, eqs.total_elapsed_time, eqs.last_elapsed_time, eqs.min_elapsed_time, eqs.max_elapsed_time, eqs.total_logical_writes, eqs.last_logical_writes, eqs.min_logical_writes, eqs.max_logical_writes, eqs.query_plan_hash FROM sys.dm_exec_query_stats AS eqs CROSS APPLY sys.dm_exec_sql_text(eqs.sql_handle) AS estORDER BY eqs.total_physical_reads DESC
[解决办法]
支持LZ的探寻与验证的精神,赞个
[解决办法]
最好指定 否则会引起不必要的麻烦
[解决办法]
new SqlParameter("@UserID", SqlDbType.BigInt,19,ParameterDirection.Input,false,8,0,"",DataRowVersion.Current,model.UserID)//,new SqlParameter("@Name", SqlDbType.NVarChar,20,ParameterDirection.Input,false,0,0,"",DataRowVersion.Current,model.Name)//,new SqlParameter("@Password", SqlDbType.Decimal,18,ParameterDirection.Input,true,9,2,"",DataRowVersion.Current,model.Password)//,new SqlParameter("@UnitID", SqlDbType.DateTime,23,ParameterDirection.Input,true,8,3,"",DataRowVersion.Current,model.UnitID)//,new SqlParameter("@Reserved", SqlDbType.Bit,1,ParameterDirection.Input,true,1,0,"",DataRowVersion.Current,model.Reserved)//
[解决办法]
我一般都是不指定字符串大小。。看来对性能影响不小!
[解决办法]
虽然不明白楼主在说什么,但是感觉楼主很牛B
------解决方案--------------------
int当然只能到4了,int32 =4*8
[解决办法]