두 번째 마지막 행의 ExecuteNonQuery에서 어색한 오류가 발생합니다.입력 문자열의 형식이 올바르지 않습니다.
Errormassage는 : System.FormatException :
닷넷 프레임 워크 오류 사용자 정의 루틴 또는 집계 "sp_InsertShuttleCount"의 실행 중에 발생한 입력 문자열의 형식이 잘못되었습니다. System.FormatException : AtsProcedures에서 System.Number.StringToNumber (문자열 str을, NumberStyles 옵션 NumberBuffer & 번호,하는 NumberFormatInfo 정보, 부울 parseDecimal) System.Number.ParseInt32에서 (String를, NumberStyles 스타일,하는 NumberFormatInfo 정보) 에서 . InsertShuttleErrorCount (SqlString 셔틀, SqlString 스테이션, SqlString 오류 상태, SqlString 중첩, SqlString 오류 네임, SqlDateTime ts) .
스택 트레이스 :
System.Data.SqlClient.SqlInternalConnection.OnError에서 System.Data.SqlClient.SqlConnection.OnError (SQLEXCEPTION 예외 부울 breakConnection) 에서(SQLEXCEPTION 예외 부울 breakConnection) System.Data.SqlClient.SqlCommand.FinishExecut에서 System.Data.SqlClient.TdsParser.Run에서 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning() (runBehavior runBehavior, SqlCommand를 cmdHandler, SqlDataReader의 데이터 스트림, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)에서 System.Data.SqlClient.SqlCommand.RunExecuteReader (CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)에서 을 eReader (SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) RunBehavior runBehavior, System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery에서 부울 returnStream 문자열 방법 DbAsyncResult 결과) (DbAsyncResult 결과, ATS_Test_Data_Generator에서 System.Data.SqlClient.SqlCommand.ExecuteNonQuery에서 문자열 methodName로 부울 sendToPipe) () . C : \ Code \ ATSBDE \ C# \에서 Form1..ctor()를 생성하십시오. Data \ ATS_Test_Data_Generator \ ATS_Test_Data_Generator \ Form1.cs :at ATS_Test_Data_Generator.Program.Main() in C : \ Code \ ATSBDE \ C# \ 데이터 생성 \ ATS_Test_Data_Gen System.AppDomain.ExecuteAssembly (String assemblyFile, Evidence assemblySecurity, String [] args)의 에서 System.AppDomain._nExecuteAssembly ()에서 을 입력하십시오. at Microsoft.VisualStudio .HostingProcess.HostProc.RunUsersAssembly()에서 System.Threading.ExecutionContext.Run System.Threading.ThreadHelper.ThreadStart_Context (객체 상태)에서 (ExecutionContext에 ExecutionContext에, ContextCallback 콜백, 부울 ignoreSyncCtx를 상태 객체)에 System.Threading.ExecutionContext .Run (ExecutionContext executionContext, ContextCallback 콜백, 개체 상태) at 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, 6, 4, 5, 4, 4, 6, 4, 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 | 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; 2 | 3 | 4 | 5 | 6 | 7 | 8 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8; 3 | 4 | 5 | 6 | 7 | 8 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8; 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 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | 1; 1 | 1 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 1; 0 | 0 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 1;
D는 날짜 시간이다 d.ToString() "10.02.2012 6시 1분 0초은"문자열
저장된 절차 4 NVARCHAR (4000)를 취하고 한 날짜 시간 저장
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();
}
값 절차
그것은 자주 사용되기 때문에 잘 작동하는 CLR 절차입니다. 물론 오타가 5 개있는 Nvarchars가 있습니다.
PROCEDURE [DBO]. sp_InsertShuttleCount] @shuttle NVARCHAR, @stations의 NVARCHAR, @errorstations의 NVARCHAR, @nests의 NVARCHAR, @errornests의 NVARCHAR, @ts는 [날짜] WITH CALLER AS EXECUTE CREATE EXTERNAL NAME 같이 ATS-CLR]. AtsProcedures]. InsertShuttleErrorCount] GO
EXEC 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
내 코드에 어떤 문제가 있습니까?
저장 프로 시저도 게시 할 수 있습니까? 문제가있을 수 있습니다. – aaronj
예. 그리고 4 개의 nvarchars와 1 개의 datetime이 걸리거나 오타가 있었습니까? 당신은 6 개의 인수로 호출합니다. 그 중 5 개는 nvarchar입니다. –