【发布时间】:2014-02-25 09:27:14
【问题描述】:
在以下代码中使用时出现错误。并非所有记录都发生这种情况。但在 5000 笔交易中,至少有 10 次我遇到了错误。我交叉检查了数据库中的数据,数据很好,但我不确定为什么会出现这个错误。请您帮我展示代码实现的正确路径。
服务方式:
public List GetStockPIN(string sInput)
{
List listStockInfo = new List();
try
{
DEBUG("Info from GetStockPIN : ", sInput);
// Parse request string
Parseparams(sInput);
string sTerminalId = GetValue("TerminalId");
string sMerchantId = GetValue("MerchantId");
string sBankCode= GetValue("BankCode");
string sAppId = GetValue("AppId");
string sProductName = GetValue("ProductName");
string sDenomName = GetValue("DenomName");
string sQTY = GetValue("QTY");
StockRepository objStockRepository = new StockRepository(sConString) { DenomName = sDenomName, ProductName = sProductName, TerminalId = sTerminalId, Qty = Convert.ToInt32(sQTY) };
listStockInfo = objStockRepository.GetStockPIN();
return listStockInfo;
}
catch (Exception ex)
{
DEBUG("Error from GetStockPIN : ", ex);
return listStockInfo;
}
}
数据库访问方法:
public List GetStockPIN()
{
DataTable dtrec = new DataTable();
List objStockInfo = new List();
SqlConnection conn = null;
try
{
using (conn = new SqlConnection(sConnectionString))
{
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "prc_GetStockPIN";
cmd.Parameters.Add(new SqlParameter("@TerminalId", SqlDbType.NVarChar));
cmd.Parameters["@TerminalId"].Value = TerminalId;
cmd.Parameters.Add(new SqlParameter("@ProductName", SqlDbType.VarChar));
cmd.Parameters["@ProductName"].Value = ProductName;
cmd.Parameters.Add(new SqlParameter("@DenomName", SqlDbType.VarChar));
cmd.Parameters["@DenomName"].Value = DenomName;
cmd.Parameters.Add(new SqlParameter("@Qty", SqlDbType.Int));
cmd.Parameters["@Qty"].Value = Qty;
conn.Open();
using (SqlDataAdapter da = new SqlDataAdapter(cmd))
{
da.Fill(dtrec);
}
//Some additional code that generates List
}
}
}
catch (Exception error)
{
throw error;
}
finally
{
if (conn != null)
{
try
{
conn.Close();
}
catch (Exception ex)
{
}
}
}
return objStockInfo;
}
}
这里是异常输出:
调试:来自 GetStockPIN 的错误: 在 System.Data.SqlClient.SqlConnection.OnError(SqlException 异常,布尔 breakConnection,Action`1 wrapCloseInAction) 在 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException 异常,布尔 breakConnection,Action`1 wrapCloseInAction) 在 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj,布尔调用者HasConnectionLock,布尔异步关闭) 在 System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior,SqlCommand cmdHandler,SqlDataReader dataStream,BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj,Boolean & dataReady) 在 System.Data.SqlClient.SqlDataReader.TryConsumeMetaData() 在 System.Data.SqlClient.SqlDataReader.get_MetaData() 在 System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds,RunBehavior runBehavior,字符串 resetOptionsString) 在 System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior,RunBehavior runBehavior,布尔 returnStream,布尔异步,Int32 超时,任务和任务,布尔异步写入,SqlDataReader ds) 在 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior,RunBehavior runBehavior,布尔 returnStream,字符串方法,TaskCompletionSource`1 完成,Int32 超时,任务和任务,布尔 asyncWrite) 在 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior,RunBehavior runBehavior,布尔 returnStream,String 方法) 在 System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior 行为,字符串方法) 在 System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior 行为) 在 System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior 行为) 在 System.Data.Common.DbDataAdapter.FillInternal(DataSet 数据集,DataTable[] 数据表,Int32 startRecord,Int32 maxRecords,String srcTable,IDbCommand 命令,CommandBehavior 行为) 在 System.Data.Common.DbDataAdapter.Fill(DataTable[] dataTables,Int32 startRecord,Int32 maxRecords,IDbCommand 命令,CommandBehavior 行为) 在 System.Data.Common.DbDataAdapter.Fill(DataTable 数据表) 在 TAMSBulkPIN.DAL.StockRepository.GetStockPIN() 在 TAMSBulkPIN.BulkPINSVC.GetStockPIN(字符串 sInput)【问题讨论】:
-
您能否也提供您收到的实际错误消息,因为您提供的堆栈跟踪实际上并未显示这一点。
-
@MartinParkin 我正在提供使用我拥有的代码获得的异常详细信息。
标签: c# sqlcommand