C# 在C/sqlite中转义SQL或:如何在此处使用参数?

C# 在C/sqlite中转义SQL或:如何在此处使用参数?,c#,sqlite,sqlparameter,C#,Sqlite,Sqlparameter,我意识到手工制作SQL语句是邪恶的。我也意识到,每个看到这篇文章的人都会自然而然地回答“使用参数”。我在这里也遇到过类似的问题,但我不知道这些问题如何适用于我的具体问题 我将System.Data.SQLite与C结合使用。我想动态创建一个视图,比如listview_asdf,然后我可以使用简单的SELECT*FROM listview_asdf语句在库中访问它。该库使用大量自动生成的语句访问我的视图 问题是,在某一点上,我需要创建如下视图: CREATE VIEW listview_asdf

我意识到手工制作SQL语句是邪恶的。我也意识到,每个看到这篇文章的人都会自然而然地回答“使用参数”。我在这里也遇到过类似的问题,但我不知道这些问题如何适用于我的具体问题

我将System.Data.SQLite与C结合使用。我想动态创建一个视图,比如listview_asdf,然后我可以使用简单的SELECT*FROM listview_asdf语句在库中访问它。该库使用大量自动生成的语句访问我的视图

问题是,在某一点上,我需要创建如下视图:

CREATE VIEW listview_asdf AS SELECT * FROM tbl_asdf WHERE id IN (1,2,3)
不知道in列表中有多少个参数和哪些参数。事实上,每次我使用它时,列表都会有所不同,我会在Dispose方法中删除视图。据我所知,创建视图不允许使用参数

因此,我需要轻松地使用任意长度的参数数组,并使用IN。。。条款在这里,我需要插入参数值。如上所示,对于整数,这是没有问题的,但是对于字符串或其他类型的System.DateTime,我想到我需要某种转义

除此之外,我需要一些方法来逃避逃跑的必要性。除了不祥的预兆,我不知道有什么解决办法

sql = sql.Replace("'","''");
正如我所指出的,这肯定会让我丢掉我喜欢的工作


有什么办法吗?

如果有更好的办法,就要避免替换。在这里,没有更好的办法了。好吧,我想我必须遵循这个建议。我希望这真的可以阻止SQL注入,如果可以,为什么每个人都说它是邪恶的?缺点是什么?。我必须说,我对C没有提供转义函数感到失望,它引用了在每次转弯时都使用参数的可能性,让有我问题的人孤身一人在野外-这里是微软的1。