输入字符串的格式不正确



我在倒数第二行的ExecuteNonQuery中遇到一个尴尬的错误。

错误消息:

在执行用户定义例程或聚合"sp_InsertShuttleCount"期间发生.NET Framework错误:System.FormatException:输入字符串的格式不正确。System.FormatException:在System.Number.StringToNumber(字符串str、NumberStyles选项、NumberBuffer&Number、NumberFormatInfo信息、Boolean parseDecimal)位于System.Number.ParseInt32(字符串s,NumberStyles样式,NumberFormatInfo信息)在AtsProcedures。InsertShuttleErrorCount(SqlString穿梭程序、SqlString工作站、SqlString错误工作站、Sql字符串嵌套、Sql字符串错误嵌套、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.FinishExecuteReader(SqlDataReader ds,RunBehavior RunBehavior,String resetOptionsString)位于System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior,RunBehavior RunBehavior、Boolean returnStream、Boolean async)位于System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior,RunBehavior RunBehavior、Boolean returnStream、String方法、DbAsyncResult结果)位于System.Data.SqlClient.SqlCommand.InteralExecuteNonQuery(DbAsyncResult结果,String methodName,布尔sendToPipe)位于System.Data.SqlClient.SqlCommand.ExecuteNonQuery()位于C:\Code\ATSBDE\C#\Generate Data\ATS_Test_Data_Generator\ATS_Test_Data_Gnerator\Form1.ctor()中。cs:cline 113在C:\Code\ATSBDE\C#\Generate Data\ATS_Test_Data_Generator\ATS_Test_Data_Gnerator\Program.Main()中位于System.AppDomain_nExecuteAssembly(RuntimeAssembly程序集,String[]参数)位于System.AppDomain.ExecuteAssembly(String assemblyFile,Evidence assemblySecurity,String[]args)位于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回调,对象状态)位于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;

错误嵌套:0|1|1|0|1|1|0;1|0|1|0|0|1 |0|0;0|1|0|0|1|1|1;1|0|1|0|1|1|0;1|1|1|0|1|1|0;1|1|0|1|0|1 |1;1|1|1|0|0|0;0|1|1|1|0|0|1;1|1|0|0|1|1|0;0|0|0|1|1|0|1|1;0|1|1|1|0|1|1;1|0|0|1|0|1;0|0|1|1|0|0|1;1|1|1|0|1|0|0;0|1|0|1|1|0|1;0|1|1|0|1|0|0;1|1|0|1|0|1;0|1|0|0|1|0\1|0;1|1|1|0|0|1|1;

D是日期时间:D.ToString()"10.02.2012 06: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();
}

存储过程

这是一个运行良好的CLR过程,因为它经常使用。当然还有5个Nvarchars是打字错误。

创建过程[dbo]。[sp_InsertShuttleCount]@穿梭机nvarchar,@nvarchar站,@错误站nvarchar,@巢nvarchar,@errornests nvarchar,@ts[日期时间]以EXECUTE作为调用方作为外部名称[ats clr]。[AtsProcedures]。[InsertShuttleErrorCount]转到

EXEC sys.sp_addextendedproperty@name=N'SqlAssemblyFile',@value=N'AtsProcedures.cs',@level0type=N'SCHEMA',@level0name=N'dbo',@level1type=N'dPROCEDURE',@level 1name=N_sp_InsertShuttleCount'转到

EXEC sys.sp_addextendedproperty@name=N'SqlAssemblyFileLine',@value=N'51',@level0type=N'SCHEMA',@level0name=N'dbo',@level 1type=N'dPROCEDURE',@level1name=Nsp_InsertShuttleCount'转到

我的代码出了什么问题?

您的问题可能是reader.GetInt32(0)。您很可能遇到了无法正确解析的值。出现错误时,请尝试检查读取器[0]的值。还要记住,如果GetInt32在数据库中达到NULL值,它将失败。如果有NULL,请首先使用适当的If条件调用reader.IsDBNUll(0)

我在每个字符串末尾的分号上都有问题。。。

相关内容

  • 没有找到相关文章

最新更新