C# 插入语句组合逻辑

C# 插入语句组合逻辑,c#,sql-server,sql-server-2005,C#,Sql Server,Sql Server 2005,好的,我使用C#将信息插入数据库服务器的表中。它根据添加到其中的一组if语句创建SQL命令。我在创建干净的语句时遇到了一个问题。我知道,要在SQL Server中组合Insert语句,我们使用: INSERT INTO myTable SELECT 'value1', 'value2' UNION ALL SELECT 'value3', 'value4' UNION ALL SELECT etc 我的问题是对它们进行排序,使语句无论通过哪个if语句都能工作。比如说, function()

好的,我使用C#将信息插入数据库服务器的表中。它根据添加到其中的一组if语句创建SQL命令。我在创建干净的语句时遇到了一个问题。我知道,要在SQL Server中组合Insert语句,我们使用:

INSERT INTO myTable 
SELECT 'value1', 'value2'
UNION ALL
SELECT 'value3', 'value4'
UNION ALL 
SELECT
etc
我的问题是对它们进行排序,使语句无论通过哪个if语句都能工作。比如说,

function()
string sqltext = "INSERT INTO myTable"
if(cond1)
{ sqltext=sqltext + "SELECT 'v1', 'v2' UNION ALL" }
else if (cond2) {
sqltext = sqltext + "SELECT 'v3', 'v4' UNION ALL" }
在这种情况下,如果任一条件自行返回,则该语句将不起作用,因为该语句将以UNION ALL结尾。我希望这是有道理的。想法?

在生成sqltext后从中删除“UNION ALL”

                if(sqltext .Trim().EndsWith("UNION ALL")) {
                    sqltext = sqltext.Remove(s.LastIndexOf("UNION ALL"));
                }

另外,作为旁注,我建议使用
StingBuilder
,而不是使用
+

创建一个选择列表

string sqltext = "INSERT INTO myTable";

List<string> selectList = new List<string>();
最后

string selectStatement = string.Join(" UNION ALL ", selectList.ToArray());
sqltext = sqltext + " " + selectStatement;

这将是我的建议,但也许OP没有使用C#4.0?@Fish,C#4.0与任何事情有什么关系
string.Join
从.NET2.0开始就存在了。@FishBasketGordo
string.Join()
从.NET2.0开始就存在了,而且他说他在哪里没有使用c#4.0?@Bala R:我的错误。我在文档中查找了string.Join(string,IEnumerable)。这种重载从4.0开始就存在了。这很好,我毫不怀疑它可以工作,但编译器拒绝回避这样一个事实,即sqltext在编译时不是一个完整的语句。有办法解决这个问题吗?当command.ExecuteNonQuery在if语句之外时,代码会给我一个语法错误,但在if语句内部时,代码会给我一个语法错误。这听起来像是一个潜在的SQL注入漏洞。谨慎地进行。。。请在你的代码出现在每日wtf之前停止这样做。编写存储过程或使用ORM。这段代码完全是供内部使用的,所以无论如何只能由管理员访问。但是谢谢你。今后我会记住这一点
string selectStatement = string.Join(" UNION ALL ", selectList.ToArray());
sqltext = sqltext + " " + selectStatement;