通过.NET程序动态创建SQL语句

时间:2013-10-03 19:55:44

标签: sql vb.net winforms oracle ado.net

我正在研究一个小型应用程序,它通过将Excel工作表上的某些条目与Oracle数据库中的表进行比较来验证Oracle数据库中的某些条目,因此我只是在查询数据库而不是太复杂。 / p>

我试图让它变得完全动态,因为无论查询是什么,我都不必进行任何代码更改但是当我查询的表有数字时我遇到了一个小问题和字符串类型值。

If chkConnState() Then
sSql = "SELECT * FROM " & workSheetName & " WHERE "
For i = 1 To ds.Tables.Item(0).Columns.Count - 1
sSql &= ds.Tables.Item(0).Columns.Item(i).ToString & " = " & ds.Tables.Item(0).Rows.Item(i).Item(i).ToString & " AND "
Next
newSql = sSql.Substring(0, sSql.Length - 4)
End If

这里我只收集SQL语句来查询表。我从Excel中获取列和行信息(我知道的信息是正确的,并且用于检查表中的内容),然后从查询中删除结尾的“AND”。

有没有简单的方法来确定列是数字还是字符串?我现在遇到的问题是我不知道如何确定我应该在哪里添加“'”&价值与价值字符串值中的“'”动态。我想说的只是PK的查询,但我不确定是否有一种简单的方法可以找到它,因为它对于每个表都不同,并且按照上面的方式进行,我将只检索一个记录而不是可能的多个。有没有更好的方法来实现这一目标?

2 个答案:

答案 0 :(得分:2)

正如LarsTech所说,您可以使用TryParse来确定值是否为数字。

If(Double.TryParse(ds.Tables.Item(0).Rows.Item(i).Item(i).ToString, Nothing), _
ds.Tables.Item(0).Rows.Item(i).Item(i).ToString, _ 
"'" & ds.Tables.Item(0).Rows.Item(i).Item(i).ToString & "'")

这将在任何非数字值附近放置单引号。

答案 1 :(得分:0)

您可以使用以下Func轻松检查字段

public static Func<string, bool> isNumeric = x => { int i = 0; return Int32.TryParse(x, out i); };

简单使用

if(isNumeric(yourField)) {

}其他 {

}