C#sql查询在cmd.execute处停止

问题描述 投票:0回答:1

您好,我已经建立了一种方法,该方法使用搜索参数,然后返回查询。这是使用ADO.net完成的,现在我注意到我的方法突然以cmd.execute结尾。这是我的方法。

  public class SQLStringSearchService
    {
        string connectionString = string




        public async Task<List<TransactionJournal>> SearchArchivedTransactionJournal(DateTime transactionDate, string Region, string MCC, string MerchantID, string TxnCurrency, string TerminalID, decimal TxnAmount, string BIN, string MsgType, string MaskedPan, string ProcessingCode, string ClearPan, string ResponseCode, string AuthorizationCode, string EntryMode, [FromQuery] PaginationDTO pagination)
        {
            var monthString = string.Empty;

            if (transactionDate.Month < 10)
            {
              monthString = transactionDate.Month.ToString().Insert(0,"0");
            }
            else
            {
                monthString = transactionDate.Month.ToString();
            }
            var DbTable = "TRANSACTIONJOURNAL_" + transactionDate.Year.ToString() + monthString;
            var queryable = new List<TransactionJournal>();

         using (SqlConnection connection = new SqlConnection(connectionString))
            {
                using (var cmd = new SqlCommand())
                {
                    connection.Open();
                    cmd.Connection = connection;
                    cmd.CommandType = CommandType.Text;
                    cmd.CommandText = "Select * From Table = @Table Where TransactionDateTime <= @DateTime and AcquirerID = @Region and MerchantCategoryCode = @MCC and MerchantID = @MerchantId and Currency = @TxnCurrency and TerminalID = @TerminalId and " +
                        "TransactionAmount = @TxnAmount and Bin = @Bin and MessageType = @MsgType and ProcessingCode = @ProcessingCode and PANM = @Panm and PAN = @Pan and ResponseCode = @ResponseCode and AuthorizationCode = @AuthCode and ResponseCode = @ResponseCode";
                    cmd.Parameters.AddWithValue("@Table", DbTable);
                    cmd.Parameters.AddWithValue("@DateTime", transactionDate);
                    cmd.Parameters.AddWithValue("@Region", Region);
                    cmd.Parameters.AddWithValue("@MCC", MCC);
                    cmd.Parameters.AddWithValue("@MerchantId", MerchantID);
                    cmd.Parameters.AddWithValue("@TxnCurrency", TxnCurrency);
                    cmd.Parameters.AddWithValue("@TerminalId", TerminalID);
                    cmd.Parameters.AddWithValue("@TxnAmount", TxnAmount);
                    cmd.Parameters.AddWithValue("@Bin", BIN);
                    cmd.Parameters.AddWithValue("@MsgType", MsgType);
                    cmd.Parameters.AddWithValue("@ProcessingCode", ProcessingCode);
                    cmd.Parameters.AddWithValue("@Panm", MaskedPan);
                    cmd.Parameters.AddWithValue("@Pan", ClearPan);
                    cmd.Parameters.AddWithValue("@ResponseCode", ResponseCode);
                    cmd.Parameters.AddWithValue("@AuthCode", AuthorizationCode);
                    cmd.Parameters.AddWithValue("@ResponseCode", ResponseCode);
                    queryable = (List<TransactionJournal>)cmd.ExecuteScalar();
                    cmd.Dispose();
                }
            }
            var orderedQuery = queryable.OrderByDescending(x=> x.TransactionDateTime).AsQueryable();
            await HttpContextExtensions.GetPage<TransactionJournal>(orderedQuery, pagination.Page, pagination.QuantityPerPage);
            return await orderedQuery.Paginate(pagination).ToListAsync();

        }

    }

我已经尝试调试,但是该方法刚刚结束,我似乎无法弄清楚问题可能出在哪里。如果有人可以向我展示一个正确方法的示例,那么我将不胜感激。谢谢!

c# sql ado
1个回答
0
投票

代码不仅会停下来,而且似乎会做任何调整,它都可能会遇到无法正确处理的异常,这是在无法忍受的编码结构内部的-如果有一些后台线程,我通常会看到这种情况涉及到该线程遇到异常,它被停止,并且该异常被转移到正在管理该线程的任何对象上(然后对该线程不执行任何操作)-可能我们发现此方法是在没有等待的情况下调用的,或者在没有'没有检索到异常

全部,此代码有一些缺陷,无法正常工作。根据注释,sql无效。您也不会/无法执行scalar,并希望从中获取列表。根据定义,标量是一个值,任何结果集的左上角单元格-它没有范围可以成为列表

如果启用了抛出时中断(在调试菜单中,找到异常窗口,请在“公共语言运行时”旁边打勾-现在,一旦引发,处理或不处理任何异常,代码就会停止。您可能会现在发现您的代码在sql异常上停止,但是至少您可以对其进行修复并继续前进。建议您至少将executeXxx包装在try catch中...

© www.soinside.com 2019 - 2024. All rights reserved.