【发布时间】:2019-01-31 20:08:11
【问题描述】:
我有一个 T-SQL 和查询:
string queryString = @"SELECT AGENT.Number, PERSON.LoginName, AGENT.EnterpriseName FROM Agent AGENT INNER JOIN Person PERSON ON AGENT.PersonID = PERSON.PersonID WHERE LOWER(EnterpriseName) LIKE @entname";
string connStr = null;
try
{
connStr = ConfigurationManager.ConnectionStrings["DB"].ConnectionString + ToInsecureString(Decrypt(ConfigurationManager.AppSettings["admin"])) + ";";
}
catch (Exception ex)
{
Logs.WriteMessage("Error while making connStr " + ex.TargetSite + ex.StackTrace + ex.ToString());
}
try
{
using (SqlConnection connection = new SqlConnection(connStr))
{
connection.Open();
using (SqlCommand command = new SqlCommand(queryString, connection))
{
SqlParameter param = new SqlParameter
{
ParameterName = "@entname",
Value = "'%" + agentName + "%'"
};
command.Parameters.Add(param);
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
login = (string)reader[1];
userID = (string)reader[0];
}
}
}
connection.Close();
}
}
这行不通。我没有得到任何结果,但是当我在查询中使用值而不是 @parameter 时,我得到了正确的结果。
参数@entname 未替换为值,因此查询失败。请给我一个提示。
当我停在断点并查看查询时,它看起来:
SELECT AGENT.Number, PERSON.LoginName, AGENT.EnterpriseName
FROM Agent AGENT
INNER JOIN Person PERSON ON AGENT.PersonID = PERSON.PersonID
WHERE LOWER(EnterpriseName) LIKE @entname
所以没有任何改变。
【问题讨论】:
-
查询在调试器下看起来是一样的,它不是在做字符串替换。你怎么知道它失败了?
-
因错误而失败?还是像空读者一样失败?去掉值中的那些单引号。
-
因为我没有得到有效的结果,但是当我在查询中使用值而不是@parameter 我得到正确的结果
-
不严格相关:如果连接字符串,您尝试捕获创建。如果有错误,你记录它(好的)并继续,因为什么都没发生(不好)。如果
connstring为空,下面的代码应该做什么?