如何检查SqlDataReader中的变量?

问题描述:

我是新的C#,写这个代码调用SQL Server存储过程:如何检查SqlDataReader中的变量?

using (SqlConnection con = new SqlConnection(Connection)) 
{ 
    using (SqlCommand cmd = new SqlCommand("CheckValidbehzad", con)) 
    { 
     cmd.CommandType = CommandType.StoredProcedure; 

     cmd.Parameters.Add("@p_bank", SqlDbType.VarChar).Value = p_bank; 
     cmd.Parameters.Add("@p_pay_date", SqlDbType.VarChar).Value = p_pay_date; 
     cmd.Parameters.Add("@p_bill_id", SqlDbType.VarChar).Value = p_bill_id; 
     cmd.Parameters.Add("@p_payment_id", SqlDbType.VarChar).Value = p_payment; 
     cmd.Parameters.Add("@p_ref_code", SqlDbType.VarChar).Value = p_ref_code; 
     cmd.Parameters.Add("@p_branch", SqlDbType.VarChar).Value = p_branch; 
     cmd.Parameters.Add("@p_channel_type", SqlDbType.VarChar).Value = p_channel; 
     cmd.Parameters.Add("@p_send_date", SqlDbType.VarChar).Value = p_send_date; 

     con.Open(); 
     reader = cmd.ExecuteReader(); 

     while (reader.Read()) 
     { 
      //TempCode = reader["PaymentID"].ToString(); 
     } 
    } 
} 

该存储过程有时结果返回ErrorNumber,有时它返回PaymentID。我如何检查这种情况?

if(reader has ErrorNumber field) then 
    do something 
else 
    do something else 

谢谢大家。

+0

指向断点并跟踪您的查询? – Valkyrie

+0

请参阅如何获取列名称:http://*.com/questions/681653/can-you-get-the-column-names-from-a-sqldatareader然后你可以写一个简单的循环/如果看看有哪些列存在。 –

不知道你究竟是如何区分这两种列返回 - 如果该列存在或缺失(视情况而定),那么你可以检查列的存在:

while (reader.Read()) 
{ 
    try 
    { 
     int paymenIdPos = reader.GetOrdinal("PaymentID"); 

     // if found --> read payment id 
     int paymentID = reader.GetInt32(paymenIdPos); 
    } 
    catch(IndexOutOfRangeException) 
    { 
     // if "PaymentID" is not found --> read the "ERrorNumber" 
     int errorCode = reader.GetInt32("ErrorNumber"); 
    }   
} 

可以检查与GetOrdinal,如marc_s建议,或者像这样:

if (reader.GetSchemaTable().Select("ColumnName = 'PaymentId'").Length > 0) 
{ 
    //do something here with pamynet 
} 
else if (reader.GetSchemaTable().Select("ColumnName = 'ErrorNumber'").Length > 0) 
{ 
    //do your stuff here with error number 
}