我有一个用VB.NET编写的程序,我把它写成了所有我的SQL语句硬编码到程序中。我想尝试将所有查询外部存储在XML文件中,以便可以对SQL进行更改(如果需要),而无需进入代码并每次都重建程序。
使事情变得复杂的部分是SQL语句需要添加变量才能使其正常运行。
例如:
SELECT name_first,name_last,email_id FROM& eventName的
eventName
是程序中的变量。
当我设置XML文件时,我尝试了以下两种方法:
<Data>
<LoadSaves>
<SQLStatement><![CDATA[SELECT name_first, name_last, email_id FROM &eventName&]]></SQLStatement>
</LoadSaves>
</Data>
和
<Data>
<LoadSaves>
<SQLStatement><![CDATA["SELECT name_first, name_last, email_id FROM" & eventName]]></SQLStatement>
</LoadSaves>
</Data>
我需要CDATA,因为如果没有它,特殊字符有时会使它表现得很奇怪。
我的问题是程序没有替换变量,因为在这两种方法中,程序将整个事物拉成字符串。
使用第一种方法,我能够在其中添加一些代码来搜索&eventName&
并将其替换为我需要的变量。这种方法工作得很好,但后来无法在外部使用SQL进行简单修改,因为如果我突然需要attendeeName
而不是eventName
,那么我可以在XML文件中更改它,但是我仍然需要更改代码以代替&attendeeName&
并相应地替换。
有什么方法可以用更动态的方式处理这个问题而不是硬编码。就像我说的那样,我希望能够将我的SQL放在一个单独的文件中,以便在需要时轻松修改而无需触及代码,但请记住,我的每个SQL语句都需要先将变量添加到它们中运行
答案 0 :(得分:2)
1:这是一个坏主意 - 有人可能搞乱你的程序,甚至找不到简单的方法来破解它。
2:你是串联的字符串,你不能在运行时做,只有设计时。
3:不要使用连接构建SQL语句,它可能很容易被黑客攻击或破坏。你应该像这样参数化你的SQL:
SELECT name_first, name_last, email_id FROM @EventName
然后当您运行命令时,使用AddWithParamter
并添加参数和值。
cmd.AddWithParameter("@EventName","Your value here")