C# 插入语句组合逻辑
好的,我使用C#将信息插入数据库服务器的表中。它根据添加到其中的一组if语句创建SQL命令。我在创建干净的语句时遇到了一个问题。我知道,要在SQL Server中组合Insert语句,我们使用: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()
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开始就存在了。@FishBasketGordostring.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;