C# SQLDataAdapter.Fill错误
当在下面的代码中使用时,我遇到了一个错误。并非所有的记录都是这样。但在5000笔交易中,至少有10次我的错误率低于这个数字。我交叉检查了数据库中的数据,数据很好,但我不确定为什么会出现这个错误。请您帮助我展示代码实现的正确路径 Service Method:C# SQLDataAdapter.Fill错误,c#,sqlcommand,C#,Sqlcommand,当在下面的代码中使用时,我遇到了一个错误。并非所有的记录都是这样。但在5000笔交易中,至少有10次我的错误率低于这个数字。我交叉检查了数据库中的数据,数据很好,但我不确定为什么会出现这个错误。请您帮助我展示代码实现的正确路径 Service Method: public List GetStockPIN(string sInput) { List listStockInfo = new List(); try { DEBUG("Info from Get
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;
}
}
Database Access Method:
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;
}
}
以下是异常输出:
DEBUG : Error from GetStockPIN :
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
at System.Data.SqlClient.SqlDataReader.TryConsumeMetaData()
at System.Data.SqlClient.SqlDataReader.get_MetaData()
at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, SqlDataReader ds)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method)
at System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior)
at System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior)
at System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
at System.Data.Common.DbDataAdapter.Fill(DataTable[] dataTables, Int32 startRecord, Int32 maxRecords, IDbCommand command, CommandBehavior behavior)
at System.Data.Common.DbDataAdapter.Fill(DataTable dataTable)
at TAMSBulkPIN.DAL.StockRepository.GetStockPIN()
at TAMSBulkPIN.BulkPINSVC.GetStockPIN(String sInput)
将连接名称传递给dataadapter对象
using (SqlDataAdapter da = new SqlDataAdapter(cmd,/* your connection object*/))
{
try
{
da.Fill(dtrec);
}
}
用try/catch包装它,并记录异常的消息和innerexception。对于某些行,您的数据可能具有某种高精度
数据适配器不填充这些行。相反,它将抛出异常。检查代码中的十进制数据类型。您是否也可以提供您接收到的实际错误消息,因为您提供的堆栈跟踪实际上并未显示此信息。@MartinParkin我提供了使用我的代码获得的异常详细信息。