[英]Parameter Add Causing Timeout in DBCommand
我有一個像bellow一樣的參數添加功能:
public static void AddParameter(DbCommand comm, string ParamName, Object objValue, DbType Paramtype,int paramSize)
{
//comm.Parameters.Clear();
DbParameter param = comm.CreateParameter();
param.ParameterName = ParamName;
param.DbType = Paramtype;
param.Size = paramSize;
param.Direction = ParameterDirection.Input;
param.Value = objValue;
comm.Parameters.Add(param);
}
現在何時執行以下操作:
conn.Open();
DbCommand cmd = conn.CreateCommand();
cmd.CommandText = "SELECT * FROM tableName WHERE MemberID=@MemberID";
AddParameter(cmd, "@MemberID", "00000970-b1fd-49ad-89fc-1de066c0076c", DbType.String, 50);
cmd.ExecuteReader();
我得到超時異常。 但是,如果我運行相同的命令喜歡
SELECT * FROM tableName WHERE MemberID='00000970-b1fd-49ad-89fc-1de066c0076c'
我得到了我想要的輸出......任何人都可以幫我找出問題所在? conn
這里是一個SqlConnection。 謝謝。
您聲明該列是varchar(50)
,但您使用的是DbType.String
; 但是, DbType.String
是nvarchar(...)
- 即unicode。 現在,有時服務器會以“正確的方式”進行轉換(這里的“右”意味着:不會破壞性能的轉換),但有時它會做出替代選擇(例如,它可能會決定它不能使用索引並進行表掃描,甚至更糟 - 它可能決定依次轉換每一行進行比較)。 那么,最好的辦法是首先指定正確的數據類型:使用DbType.AnsiString
。 DbType.String
或DbType.AnsiString
沒有任何“錯誤” - 只要它們分別正確地用於表示nvarchar
和varchar
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.