我在第二行的ExecuteNonQuery中遇到了一个尴尬的错误。输入字符串格式不正确
Errormassage: System.FormatException:用户定义的例程或聚合“sp_InsertShuttleCount”执行过程中出现
一个.NET Framework错误输入字符串的不正确的格式。 System.FormatException: 在System.Number.StringToNumber(字符串str的NumberStyles选项,NumberBuffer &数的NumberFormatInfo信息,布尔parseDecimal) 在System.Number.ParseInt32(字符串s的NumberStyles风格的NumberFormatInfo信息) 在AtsProcedures。 InsertShuttleErrorCount(SqlString穿梭,SqlString站,SqlString错误,SqlString巢,SqlString错误,SqlDateTime ts) 。
堆栈跟踪:
在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的数据流,BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj) 在System.Data.SqlClient.SqlCommand.FinishExecut eReader(SqlDataReader ds,RunBehavior runBehavior,String resetOptionsString) at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior,RunBehavior runBehavior,Boolean returnStream,Boolean async)在System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, runBehavior runBehavior,布尔returnStream,字符串方法,DbAsyncResult结果) 在System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult结果,字符串方法名,布尔sendToPipe) 在System.Data.SqlClient.SqlCommand.ExecuteNonQuery() 在ATS_Test_Data_Generator。 C:\ Code \ ATSBDE \ c#\ Generate Data \ ATS_Test_Data_Generator \ ATS_Test_Data_Generator \ Form1.cs中的Form1..ctor():第113行 位于C:\ Code \ ATSBDE \ c#\中的ATS_Test_Data_Generator.Program.Main \ ATS_Test_Data_Gen在System.AppDomain.ExecuteAssembly(String assemblyFile,Evidence assemblySecurity,String [] args) at Microsoft.VisualStudio .HostingProcess.HostProc.RunUsersAssembly() 在System.Threading.ThreadHelper.ThreadStart_Context(对象状态) 在System.Threading.ExecutionContext.Run(的ExecutionContext的ExecutionContext,ContextCallback回调,对象的状态,布尔ignoreSyncCtx) 在System.Threading.ExecutionContext .Run(ExecutionContext executionContext,ContextCallback callback,Object state) 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 | 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是一个日期时间:d.ToString() “10.02.2012 6点01分00秒” 的字符串
存储过程需要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是一个错字。
CREATE PROCEDURE [DBO]。[sp_InsertShuttleCount] @shuttle nvarchar的, @stations nvarchar的, @errorstations nvarchar的, @nests nvarchar的, @errornests nvarchar的, @ts [DATETIME] WITH EXECUTE AS CALLER AS 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 2012-02-09 17:44:48
是的。它需要4个nvarchars和1个日期时间,或者是一个错字?你用6个参数来调用它,其中5个是nvarchars。 – 2012-02-09 17:45:56