错误提示是输入的字符串格式不正确。。跟SQL没关系。
你的错误信息所在行来看,是"txtMarketPrice.Text.ToString()"的内容不是float数据类型兼容的字符串格式。
你可以把这个text的内容打印出来看下,具体错误是多少。
解决这个问题的方案之一:
限制txtMarketPrice文本框的数据录入,禁止非float格式的内容(这个可以查找下网上的验证字符串,有float格式验证的正则表达式)。
另外一个方案是使用try-catch来捕获
最后一个方案也是推荐方案就是使用TryParse:
float marketPrice;
if(!float.TryParse(txtMarketPrice.Text.ToString(), out marketPrice))
{
//数据格式不正确,所以才会parse失败。
}
最后给你个建议:
txtMarketPrice.Text本身已经是字符串格式了,没必要再ToString一次。虽然.net已经有优化,不会对性能有多大的影响,但在代码里,总是多写了很多东西。
我输入整数应该不会出现这个问题吧 出现格式不正确呢
@小柑: 整数能被parse通过。你确认你的整数是OK的?
直接这样调用,你看是否异常:
float.Parse("123");
我试了 出现 这样的问题
@笨笨蜗牛:
@小柑: 这个就是你的SQL语句的问题了。CMD这个COMMAND的SQL语句有错误才抛这个异常的。
把CMD的COMMANDTEXT贴出来看。
@笨笨蜗牛:
@笨笨蜗牛:
openCon();
cmd = new SqlCommand(sql, con);
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter[] pars = new SqlParameter[] {
new SqlParameter("@ProductID", SqlDbType.Int),
new SqlParameter("@FartherTypeID", SqlDbType.Int),
new SqlParameter("@DetailTypeID", SqlDbType.Int),
new SqlParameter("@ProductName", SqlDbType.VarChar, 50),
new SqlParameter("@MarketPrice", SqlDbType.Money),
new SqlParameter("@MenberPrice", SqlDbType.Money),
new SqlParameter("@Rebate", SqlDbType.Float),
//new SqlParameter("@AddDateTime", SqlDbType.DateTime),
//new SqlParameter("@ProductPicture", SqlDbType.VarChar, 200)
};
pars[0].Value = product.FartherTypeID;
pars[1].Value = product.DetailTypeID;
pars[2].Value = product.ProductName;
pars[3].Value = product.MarketPrice;
pars[4].Value = product.MenberPrice;
pars[5].Value = product.Rebate;
pars[6].Value = product.ProductID;
foreach (SqlParameter parameter in pars)
{
cmd.Parameters.Add(parameter);
}
i = cmd.ExecuteNonQuery();
@小柑: 我之前写修改的时候 没出现这样的问题 现在写插入就出现这样的问题
@小柑: cmd = new SqlCommand(sql, con);中的SQL是“Pro_ProductInsert”吗?如果是,那么你的程序不应该会报告这个错误信息的。
另外,float.TryParse的使用不是你说的那样,我前面有写这段代码了。
你应该学会自己看文档。VS有自动提示功能,如果关闭了,就打开,如果是打开的,就仔细看下。
嗯 找到错了 谢谢啊
这个文本框内没输入就会这样
为什么呀 ?
如果输入了 出现以下错误错误
@小柑: 没有输入肯定会报错的,因为这里要转换为float型,字符串为空时转换不了
(1)页面容错,判断为空或null,则自动补为0。
(2)用float.TryParse
是这样用吗? 怎么有错啊?
哦 谢谢了