将参数传递给动态sql c#

时间:2014-01-22 16:16:01

标签: c# oracle .net-4.5

我有一个带有动态查询的oracle表,例如

FieldName    |  DynamicSQL
customerName |  Select customerName from customer where customerId = :customerId

我正在尝试阅读动态sql并将customerId作为参数传递。我的代码看起来像

string dynamicSQL = cmd.ExecuteScalar().ToString(); //dynamicSQL = "select customername from customer where  customerID= :customerID"

我将在程序中使用cutomerID的值,并将customerID参数传递给上面的查询,我在“:”之后拆分字符串,然后将customerID值作为参数传递。

string[] parameter = dynamicSQL.split (':') //paramteter[0]= "select customername...customerID=" parameter[1]=customerID
for (int i = 0; i <= parameter.Length - 1; i++) {
 if (parameter[i] == "customerID"){
  using (OracleCommand cmd1 = new OracleCommand(dynamicSQL, conn)){
  cmd1.parameters.add("customerID",oracletype.int32).value = customerID;
  customername = cmd1.executescalar().tostring();
    }
  }
}

现在有很多查询和参数名称,如orderId。因此,如果它是另一个参数,我将有另一个案例来检查参数[i] == orderID,这是一个问题,另一个主要问题是拆分动态sql以获取参数。敌人的例子,如果我有以下动态sql

select customerName from customer c, order o where c.customerid = o.customerid and c.customerid = :customerID and o.orderid = :orderid

那么如何为同一命令传递customerid和orderid的值?基本上,如果我有多个参数,有没有办法以更通用的方式添加参数而不是硬编码参数名称并拆分它?我尝试在数组中包含所有参数(orderId,CustomerID),但如果数据类型不同,则无法向命令添加参数。我正在研究.NET4.5和C#代码。

1 个答案:

答案 0 :(得分:1)

试试这个:

//dynamicSQL = "select customername from customer where  customerID= :customerID"

using (OracleCommand cmd1 = new OracleCommand(dynamicSQL, conn)){
cmd1.parameters.add(":customerID",oracletype.int32).value = customerID;
customername = cmd1.ExecuteScalar().ToString();
}