如何检查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
谢谢大家。
答
不知道你究竟是如何区分这两种列返回 - 如果该列存在或缺失(视情况而定),那么你可以检查列的存在:
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
}
指向断点并跟踪您的查询? – Valkyrie
请参阅如何获取列名称:http://stackoverflow.com/questions/681653/can-you-get-the-column-names-from-a-sqldatareader然后你可以写一个简单的循环/如果看看有哪些列存在。 –