字符串串联在VS 2012中添加制表符而不是空格

本文关键字:制表符 空格 添加 VS 2012 字符串 | 更新日期: 2023-09-27 18:22:35

我有一个C#代码,它生成要使用以下代码执行的sql查询:

strQuery = "select * from ";
strQuery += tableName + " where";
stryQuery += " columnName = " + columnValue; //where columnValue is a parameter (@XYZ)

此代码在VS2005中运行良好。但是,在将解决方案升级到VS 2012之后,第三行出现了问题。通常情况下,查询应该看起来像

select * from tableName where columnName = columnValue

但在VS 2012中,查询看起来像

select * from tableName where'tcolumnName = columnValue

我完全不知道为什么会发生这种情况,如果是的话,为什么只有字符串连接中的前导空格。

编辑:更多详细信息:

在代码中,有一个名为CreateSQLQueryString的函数,其片段在上面。此函数创建一个以@XYZ作为列值的基本查询。然后将其传递给另一个名为CreateParameterArray的函数,该函数为所有此类@XYZ值创建一个参数数组。然后使用基字符串和参数数组来执行查询。

现在,我检查了CreateParameterArray函数接收到的字符串,该函数接收到带有制表符的字符串。因此,没有其他功能会导致问题。正是这种字符串串联造成了麻烦。

编辑:

void GetRows(connectionID)
{
string strQuery;
strQuery = "select ";
if (condition1)
strQuery += " PartName,";
if (condition2)
strQuery += " PartPrice,";
...
if (condition10)
strQuery += " PartQuantity";
strQuery += " where "
if (whereclause1)
strQuery += " partName= '" + partname + "'"; //partname = "@PartName"
if (whereclause2)
strQuery += " partPrice= '" + partPrice + "'";
...
Var ParamArray[] = CreateParameterArray(strQuery);
/// code to create connection object based on current server info
//execute query
var resultSet = connectionObject.ExecuteQuery ( strQuery, ParamArray[], connectionID);
//display result
UpdateDisplay(resultSet);
}
CreateParameterArray(string query)
{
 //code to add a value in parameter array for every reference of "@" in query.
}

这是代码的基本思想。我已将列名替换为通用列名。

最终编辑:

事实证明,在升级过程中添加了另一个isPostBack条件。不知道怎么做,也不知道为什么。但去掉它后,一切都正常。在页面初始化期间,对查询字符串调用了一个trim函数,该函数被移动到isPostBack条件。既然trim函数调用正确,那么查询就可以正常工作了。仍然不知道为什么空格被制表符取代,但谢天谢地,trim用4个空格取代了这些字符。系统现在运行良好,但我仍然对它是如何发生的感到困惑。

字符串串联在VS 2012中添加制表符而不是空格

为什么不使用String.Format

String.Format("select * from {0} where columnName = {1}",tableName, columnValue);

您是否检查了空格以确保升级没有将空格转换为选项卡?

您可以使用Ctrl+R、Ctrl+W来查看空白。