【发布时间】:2017-04-30 21:00:38
【问题描述】:
我正在使用 c# 创建一个网络应用程序,
这是我保存记录的网络服务
[WebMethod]
[ScriptMethod(UseHttpGet = true)]
public void saverecd(string id, string particular,string amt,string adjamt,string tdate, string total, string date, string utrno, string modeofpayment, string transferdate,string trainer, string typeofadj, string bnkid)
{
List<string> td = tdate.Split(',').ToList();
int i = 0;
foreach (string t in td)
{
SqlCommand cmd = new SqlCommand("insert into finalinstructoreexpense(sonvinid,particulars,amount,totalamt,date,utno,paymentid,paymode,issuedate,sondate,trainer,type,bank_id) values('@sonvinid','@particulars','@amount','@totalamt','@date','@utno','@paymentid','@paymode','@issuedate','@sondate','@trainer','@type','@bank_id')", con);
con.Open();
cmd.Parameters.Add("@id", SqlDbType.Int).Value =Convert.ToInt32(id);
cmd.Parameters.Add("@particular", SqlDbType.NVarChar).Value = particular;
cmd.Parameters.Add("@amount",SqlDbType.Float).Value=adjamt.Split(',')[i];
cmd.Parameters.Add("@totalamt", SqlDbType.NVarChar).Value = total;
cmd.Parameters.Add("@date", SqlDbType.DateTime).Value = date.Split(',')[i];
cmd.Parameters.Add("@utno", SqlDbType.NVarChar).Value = utrno;
cmd.Parameters.Add("@paymentid",SqlDbType.NVarChar).Value=paymentid;
cmd.Parameters.Add("@paymode", SqlDbType.NVarChar).Value = modeofpayment;
cmd.Parameters.Add("@issuedate", SqlDbType.DateTime).Value = transferdate;
cmd.Parameters.Add("@sondate", SqlDbType.DateTime).Value = t;
cmd.Parameters.Add("@trainer", SqlDbType.NVarChar).Value = trainer;
cmd.Parameters.Add("@type", SqlDbType.NVarChar).Value = typeofadj;
cmd.Parameters.Add("@bank_id", SqlDbType.Int).Value = Convert.ToInt32(bnkid);
cmd.ExecuteNonQuery();
message = "Adjusted Amount Inserted Successfully";
con.Close();
}
}
我不知道这段代码有什么问题,
这是我在网络服务中输入的内容
参数值 id: 0 特别: 0001 amt: 10 adjamt: 10 tdate:
01-01-2013,01-01-2013 总计:20 日期:01-01-2013 utrno:测试 付款方式:测试转移日期:01-01-2013 培训师:易卜拉欣 shaikh typeofadj: 调整 bnkid:
调用
以下是错误
System.Data.SqlClient.SqlException: Error converting data type varchar to float.
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.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString, Boolean isInternal, Boolean forDescribeParameterEncryption)
at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, Boolean inRetry, SqlDataReader ds, Boolean describeParameterEncryptionRequest)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry)
at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry)
at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
at mvcerp2.newpayment.saverecd(String id, String particular, String amt, String adjamt, String tdate, String total, String date, String utrno, String modeofpayment, String transferdate, String trainer, String typeofadj, String bnkid) in Z:\mvcerp2\mvcerp2\newpayment.asmx.cs:line 135
【问题讨论】:
-
请首先将其减少为只是导致问题的参数-您可以找到它,但我们不能轻易找到。另外,以后请花时间把代码格式化清楚,不要有任何多余的缩进。不需要很长时间,但它会在可读性方面发挥重要作用。
-
您的一列是浮点数,您正在传递一个字符串。你连错误信息都没看吗?
-
对不起先生,下一篇文章会记住这一点
-
查询中的每个参数占位符都在单引号内。这会将这些占位符转换为文字字符串。这些参数在这里根本没有使用。删除占位符周围的单引号,然后重试(不确定这是否会解决问题,因为仍然需要将浮点数作为浮点数而不是字符串传递)
标签: c# asp.net sql-server web-services