0

我必须从字符串值构建查询字符串,例如:

connString += "INSERT INTO (...) VALUES ( "+

_cd.userName "," +

//and there i'd like to use ?: operators:

_cd.lastLogin == "Null" ? "null" : _cd.lastLogin "," 

所以我的查询看起来像INSERT INTO (...) VALUES ('name', null, (...))

但是当我使用它时,它会切断我的字符串,所以它看起来像

",null,1,2,'name', (...)";

好吧,我知道我可以使用 var a,b,c,d 然后检查是否(_cd.lastLogin == "Null) a = null并将其放入字符串中,但是有很多变量。

什么是正确的使用方法?

@编辑:代码:

string query =  "INSERT INTO PersonLogin(...) " + Environment.NewLine +
 "VALUES (" + _cD.userID + ","
 + "'" + _cD.number + "',"
 + "'" + _cD.dateCreate + "','"
 + _cD.lastLogin == "Null" ? ",null," : _cD.lastLogin + "',"
 + _cD.taken + ","
 + _cD.canLogin + ""+ Environment.NewLine;
4

3 回答 3

2

您可以使用 SqlParameter 并使用 DbNull.Value 设置值

插入 (...) 值 (@par1, @par2) command.Parameters.AddwithValue("@par1",DbNull.Value)

于 2013-10-01T09:43:02.937 回答
1

进行查询的正确方法不是使用 string 构建查询,而是使用 SqlParameters。这将使您的代码更具可读性,并且可以更好地防止 sql 注入。

于 2013-10-01T09:45:13.733 回答
0

?运算符的优先级低于+运算符。因此,您需要将 and 的用法括?起来:

connString += ... + (_cd.lastLogin == "Null" ? "null" :"'"+ _cd.lastLogin) +"'" ...;
于 2013-10-01T09:41:24.327 回答