[英]How can i check what is variable into the SqlDataReader?
我是C#的新手,並編寫以下代碼來調用SQL Server存儲過程:
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");
}
}
您可以按照marc_s的建議使用GetOrdinal進行檢查,或者像這樣:
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
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.