2012-02-09 3 views
0

Я получаю неудобную ошибку в ExecuteNonQuery во второй последней строке.Строка ввода не была в правильном формате

Errormassage:

.NET Framework произошла ошибка во время выполнения определяемой пользователем подпрограммы или статистической «sp_InsertShuttleCount»: System.FormatException: Входная строка была не в правильном формате. System.FormatException: в System.Number.StringToNumber (String ул, опции NumberStyles, NumberBuffer & номер, NumberFormatInfo информация, Boolean parseDecimal) в System.Number.ParseInt32 (String s, NumberStyles стиль, NumberFormatInfo информация) на AtsProcedures. InsertShuttleErrorCount (SqlString shuttle, станции SqlString, ошибки SqlString, SqlString, SqlString errornests, SqlDateTime ts) .

StackTrace:

на System.Data.SqlClient.SqlConnection.OnError (SqlException исключением, булева breakConnection) в System.Data.SqlClient.SqlInternalConnection.OnError (SqlException исключением, булева breakConnection) на System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning() в System.Data.SqlClient.TdsParser.Run (RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader DATASTREAM, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) в System.Data.SqlClient.SqlCommand.FinishExecut Ereader (SqlDataReader DS, RunBehavior runBehavior, Строка resetOptionsString) на System.Data.SqlClient.SqlCommand.RunExecuteReaderTds (CommandBehavior cmdBehavior, RunBehavior runBehavior, булева returnStream, булева асинхронной) на System.Data.SqlClient.SqlCommand.RunExecuteReader (CommandBehavior cmdBehavior, runBehavior runBehavior, булева returnStream, метод String, DbAsyncResult результат) на System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery (результат DbAsyncResult, String имяМетода, булева sendToPipe) на System.Data.SqlClient.SqlCommand.ExecuteNonQuery() в ATS_Test_Data_Generator. Form1..ctor() в C: \ Code \ ATSBDE \ C# \ Generate Data \ ATS_Test_Data_Generator \ ATS_Test_Data_Generator \ Form1.cs: строка 113 в ATS_Test_Data_Generator.Program.Main() в C: \ Code \ ATSBDE \ C# \ Generate Data \ ATS_Test_Data_Gen Erator \ ATS_Test_Data_Generator \ Program.cs: строка 18 на System.AppDomain._nExecuteAssembly (RuntimeAssembly сборки, String [] арг) в System.AppDomain.ExecuteAssembly (String assemblyFile, Evidence assemblySecurity, String [] арг) в Microsoft.VisualStudio .HostingProcess.HostProc.RunUsersAssembly() в System.Threading.ThreadHelper.ThreadStart_Context (состояние объекта) в System.Threading.ExecutionContext.Run (ExecutionContext ExecutionContext, ContextCallback обратного вызова, объект состояния, Boolean ignoreSyncCtx) в System.Threading.ExecutionContext .Run (ExecutionContext executeContext, обратный вызов ContextCallback, состояние объекта) в System.Threading.ThreadHelper.ThreadStart()

Значения Строки

станции: 0; 5; 10; 15; 20; 30; 35; 40; 55; 60; 65; 70; 80; 85; 90; 100; 110; 120; 125;

Ошибки: 5; 3; 4; 4; 6; 4; 5; 4; 4; 6; 4; 5; 5; 4; 5; 3; 5;

Гнезда: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8; 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8; 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8; 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8; 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8; 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8; 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8; 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8; 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8; 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8; 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8; 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8; 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8; 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8; 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8; 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8; 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;

ErrorNests: 0 | 1 | 1 | 0 | 1 | 1 | 1 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | 1; 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0; 1 | 1 | 1 | 0 | 1 | 1 | 1 | 0; 1 | 1 | 0 | 1 | 0 | 1 | 1 | 1; 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0; 0 | 1 | 1 | 1 | 1 | 0 | 0 | 1; 1 | 1 | 0 | 0 | 0 | 1 | 1 | 0; 0 | 0 | 0 | 1 | 1 | 0 | 1 | 1; 0 | 1 | 1 | 1 | 0 | 1 | 1 | 1; 1 | 0 | 0 | 1 | 0 | 1 | 0 | 1; 0 | 0 | 1 | 1 | 1 | 0 | 0 | 1; 1 | 1 | 1 | 0 | 1 | 1 | 0 | 0; 0 | 1 | 0 | 1 | 1 | 0 | 1 | 1; 0 | 1 | 1 | 0 | 1 | 1 | 0 | 0; 1 | 1 | 0 | 1 | 0 | 1 | 0 | 1; 0 | 1 | 0 | 0 | 1 | 0 | 1 | 0; 1 | 1 | 1 | 0 | 0 | 0 | 1 | 1;

D является Datetime: d.ToString() "10.02.2012 6:01:00" строка

хранимых процедур занимает 4 NVARCHAR (4000) и один Datetime значения

for (int i = 0; i <= 16; i++) { 
    String Stations=""; 
    String ErrorStations = ""; 
    String Nests = ""; 
    String ErrorNests = ""; 

    command = new SqlCommand(null, connection) { 
     CommandText = "ats.sp_getStations", 
     CommandType = CommandType.StoredProcedure 
    }; 

    SqlDataReader reader = command.ExecuteReader(); 

    int k = 0; 
    while (reader.Read()) { 
     Stations += reader.GetInt32(0)+";"; 
     Nests += "1|2|3|4|5|6|7|8;"; 
     int m=0; 
     for (int j = 0; j < 8; j++) { 
      int l; 
      l=r.Next(0, 2); 
      nestcounts[i, k, j] += l; 
      m += l; 

      if(j!=7) 
       ErrorNests += nestcounts[i, k, j] + "|"; 
      else 
       ErrorNests += nestcounts[i, k, j] + ";"; 
     } 

     stationcounts[i, k] += m; 
     ErrorStations += stationcounts[i, k] + ";"; 
     k++; 
    } 
    reader.Close(); 
    command.Dispose(); 

    command = new SqlCommand(null, connection) { 
     CommandText = "exec dbo.sp_InsertShuttleCount @shuttle, @stations, @errorstations, @nests, @errornests, @ts", 
    }; 

    command.Parameters.Clear(); 
    command.Parameters.Add("@shuttle", SqlDbType.NVarChar, 4000).Value = "1"; 
    command.Parameters.Add("@stations", SqlDbType.NVarChar, 4000).Value = Stations; 
    command.Parameters.Add("@errorstations", SqlDbType.NVarChar, 4000).Value = ErrorStations; 
    command.Parameters.Add("@nests", SqlDbType.NVarChar, 4000).Value = Nests; 
    command.Parameters.Add("@errornests", SqlDbType.NVarChar, 4000).Value = ErrorNests; 
    command.Parameters.Add("@ts", SqlDbType.DateTime).Value = d; 
    command.ExecuteNonQuery(); 
    command.Dispose(); 
} 

Stored Процедура

Это процедура CLR, которая отлично работает, поскольку используется часто. И есть, конечно, 5 Nvarchars, которые были опечатками.

CREATE PROCEDURE [DBO]. [Sp_InsertShuttleCount] @shuttle NVARCHAR, @stations NVARCHAR, @errorstations NVARCHAR, @nests NVARCHAR, @errornests NVARCHAR, @ts [DateTime] С EXECUTE AS CALLER КАК ВНЕШНЕЕ иМЯ [ATS-CLR]. [AtsProcedures]. [InsertShuttleErrorCount] GO

ВЫПЛН sys.sp_addextendedproperty @ имя = N'SqlAssemblyFile '@ значение = N'AtsProcedures.cs', @ level0type = N' SCHEMA ', @ level0name = N'dbo', @ level1type = N'PROCEDURE ', @ level1name = N'sp _InsertShuttleCount ' GO

EXEC sys.sp_addextendedproperty @ имя = N'SqlAssemblyFileLine', @ значение = N'51' , @ level0type = N'SCHEMA '@ level0name = N'dbo', @ level1type = N'PROCEDURE ', @ level1name = N'sp_InsertShuttleCount' GO

Что не так с моим кодом?

+0

Вы можете разместить хранимую процедуру, а также. Там может быть проблема. – aaronj

+0

Да. И это занимает 4 nvarchars и 1 datetime, или это была опечатка? Вы называете это 6 аргументами, 5 из которых являются nvarchars. –

ответ

0

я я имел проблемы с точкой с запятой в конце каждой строки ...

0

Ваша проблема, вероятно, связана с reader.GetInt32(0). Вы, скорее всего, нажмете значение, которое не будет правильно анализироваться. Попробуйте изучить значение считывателя [0] при возникновении ошибки. Также имейте в виду, что GetInt32 завершится с ошибкой, если он достигнет значения NULL в базе данных. Если у вас есть NULL, сначала вызовите reader.IsDBNUll(0) с соответствующим условием if.

+0

Вызов функции не создает ошибок. – TheJoeIaut

Смежные вопросы