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

时间:2014-09-18 05:50:43

标签: c# sql string visual-studio visual-studio-2012

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

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

此代码在VS 2005中运行正常。但是,在将解决方案升级到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函数,查询工作正常。仍然不知道,为什么空格被制表符替换,但谢天谢地用4个空格替换这些字符。系统现在工作正常,但我仍然对它是如何发生感到困惑。

2 个答案:

答案 0 :(得分:1)

为什么不使用String.Format

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

答案 1 :(得分:0)

您是否检查过您的空白以确保升级没有将空格转换为标签?

您可以使用Ctrl + R,Ctrl + W查看空格。