更改 where 子句以使用 Oracle 命令参数
Changing the where clause to use Oracle Command Parameter
我目前正在创建 Web API 以接受一个输入参数并在 where 子句的特定字段中使用它们。下面是服务的代码
public HttpResponseMessage Getdetails( string JRS_NO,string DOB)
{
List<OracleParameter> prms = new List<OracleParameter>();
List<string> selectionStrings = new List<string>();
var jrs ="";
var dateofBirth="";
string connStr = ConfigurationManager.ConnectionStrings["TGSDataConnection"].ConnectionString;
using (OracleConnection dbconn = new OracleConnection(connStr))
{
DataSet userDataset = new DataSet();
var strQuery = "SELECT * from LIMS_SAMPLE_RESULTS_VW where JRS_NO =:jrs and DOB=:dateofBirth";
jrs = JRS_NO;
dateofBirth = DOB;
prms.Add(jrs);
prms.Add(dateofBirth);
我如何使用 OracleParameter 而不是直接在查询中提供它们 here.I 已经为命令参数创建了 prms 但不确定如何继续。
您在代码中犯了多个错误。我正在为您编写代码,但剩下的您必须修复。
string jrs = "";
string dateofBirth = "";
string connectionString = ConfigurationManager.ConnectionStrings["TGSDataConnection"].ConnectionString;
using (OracleConnection connection = new OracleConnection(connectionString))
{
string query = "SELECT * from LIMS_SAMPLE_RESULTS_VW where JRS_NO =:jrs and DOB=:dateofBirth";
OracleCommand command = new OracleCommand(query, connection);
command.Parameters.Add(new OracleParameter("jrs", jrs));
command.Parameters.Add(new OracleParameter("dateofBirth", dateofBirth));
command.CommandType = CommandType.Text;
connection.Open();
OracleDataReader reader = command.ExecuteReader();
try
{
while (reader.Read())
{
string value = reader["ColumName"].ToString();
}
}
finally
{
reader.Close();
}
}
不要用代码写查询,写存储过程然后用代码调用。
您必须使用 ExecuteReader
从 SELECT
查询中获取结果。
将 ColumName
替换为您在 table 中的列名。
不要将 @
与参数一起使用,在它们之前使用 :
。
检查您的连接字符串是否正确。
您可以 运行 在 Oracle DB 中单独查询您的查询,只是为了测试您的查询是否给出了所需的结果。
检查 jrs
和 dateOfBirth
的数据类型,在我的示例中,我将其作为字符串。
在 finally 块中关闭 Reader
。
我个人的意见,不要用SELECT *
,总是用列名。因为它会给你所有的列,可能你只需要 2 或 3。
我目前正在创建 Web API 以接受一个输入参数并在 where 子句的特定字段中使用它们。下面是服务的代码
public HttpResponseMessage Getdetails( string JRS_NO,string DOB)
{
List<OracleParameter> prms = new List<OracleParameter>();
List<string> selectionStrings = new List<string>();
var jrs ="";
var dateofBirth="";
string connStr = ConfigurationManager.ConnectionStrings["TGSDataConnection"].ConnectionString;
using (OracleConnection dbconn = new OracleConnection(connStr))
{
DataSet userDataset = new DataSet();
var strQuery = "SELECT * from LIMS_SAMPLE_RESULTS_VW where JRS_NO =:jrs and DOB=:dateofBirth";
jrs = JRS_NO;
dateofBirth = DOB;
prms.Add(jrs);
prms.Add(dateofBirth);
我如何使用 OracleParameter 而不是直接在查询中提供它们 here.I 已经为命令参数创建了 prms 但不确定如何继续。
您在代码中犯了多个错误。我正在为您编写代码,但剩下的您必须修复。
string jrs = "";
string dateofBirth = "";
string connectionString = ConfigurationManager.ConnectionStrings["TGSDataConnection"].ConnectionString;
using (OracleConnection connection = new OracleConnection(connectionString))
{
string query = "SELECT * from LIMS_SAMPLE_RESULTS_VW where JRS_NO =:jrs and DOB=:dateofBirth";
OracleCommand command = new OracleCommand(query, connection);
command.Parameters.Add(new OracleParameter("jrs", jrs));
command.Parameters.Add(new OracleParameter("dateofBirth", dateofBirth));
command.CommandType = CommandType.Text;
connection.Open();
OracleDataReader reader = command.ExecuteReader();
try
{
while (reader.Read())
{
string value = reader["ColumName"].ToString();
}
}
finally
{
reader.Close();
}
}
不要用代码写查询,写存储过程然后用代码调用。
您必须使用 ExecuteReader
从 SELECT
查询中获取结果。
将 ColumName
替换为您在 table 中的列名。
不要将 @
与参数一起使用,在它们之前使用 :
。
检查您的连接字符串是否正确。
您可以 运行 在 Oracle DB 中单独查询您的查询,只是为了测试您的查询是否给出了所需的结果。
检查 jrs
和 dateOfBirth
的数据类型,在我的示例中,我将其作为字符串。
在 finally 块中关闭 Reader
。
我个人的意见,不要用SELECT *
,总是用列名。因为它会给你所有的列,可能你只需要 2 或 3。