首页 新闻 会员 周边 捐助

SQL 语句参数输入如格式错误

0
悬赏园豆:5 [已解决问题] 解决于 2012-06-01 12:56

SQL 语句参数输入如格式错误  这是什么问题   请求各位指点

小柑的主页 小柑 | 初学一级 | 园豆:6
提问于:2012-05-31 23:42
< >
分享
最佳答案
0

错误提示是输入的字符串格式不正确。。跟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已经有优化,不会对性能有多大的影响,但在代码里,总是多写了很多东西。

收获园豆:5
无之无 | 大侠五级 |园豆:5095 | 2012-06-01 08:50

我输入整数应该不会出现这个问题吧  出现格式不正确呢

小柑 | 园豆:6 (初学一级) | 2012-06-01 09:06

@小柑: 整数能被parse通过。你确认你的整数是OK的?

直接这样调用,你看是否异常:

float.Parse("123");

无之无 | 园豆:5095 (大侠五级) | 2012-06-01 09:13

我试了  出现  这样的问题

@笨笨蜗牛: 

小柑 | 园豆:6 (初学一级) | 2012-06-01 09:34

@小柑: 这个就是你的SQL语句的问题了。CMD这个COMMAND的SQL语句有错误才抛这个异常的。

把CMD的COMMANDTEXT贴出来看。

无之无 | 园豆:5095 (大侠五级) | 2012-06-01 09:38

@笨笨蜗牛: 

小柑 | 园豆:6 (初学一级) | 2012-06-01 09:45

@笨笨蜗牛: 

   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();

小柑 | 园豆:6 (初学一级) | 2012-06-01 09:47

@小柑: 我之前写修改的时候 没出现这样的问题   现在写插入就出现这样的问题

小柑 | 园豆:6 (初学一级) | 2012-06-01 09:52

@小柑: cmd = new SqlCommand(sql, con);中的SQL是“Pro_ProductInsert”吗?如果是,那么你的程序不应该会报告这个错误信息的。

另外,float.TryParse的使用不是你说的那样,我前面有写这段代码了。

你应该学会自己看文档。VS有自动提示功能,如果关闭了,就打开,如果是打开的,就仔细看下。

无之无 | 园豆:5095 (大侠五级) | 2012-06-01 10:37

嗯  找到错了   谢谢啊  

小柑 | 园豆:6 (初学一级) | 2012-06-01 12:54
其他回答(2)
0
你用断点调试一下,看看txtPrice中是什么,这里要的是浮点型字符串,注意前后空格也要去掉
artwl | 园豆:16736 (专家六级) | 2012-06-01 08:21

这个文本框内没输入就会这样

支持(0) 反对(0) 小柑 | 园豆:6 (初学一级) | 2012-06-01 08:39

为什么呀 ?

支持(0) 反对(0) 小柑 | 园豆:6 (初学一级) | 2012-06-01 08:41

如果输入了   出现以下错误错误 

支持(0) 反对(0) 小柑 | 园豆:6 (初学一级) | 2012-06-01 08:45

@小柑: 没有输入肯定会报错的,因为这里要转换为float型,字符串为空时转换不了

支持(0) 反对(0) artwl | 园豆:16736 (专家六级) | 2012-06-01 09:04
0

(1)页面容错,判断为空或null,则自动补为0。

(2)用float.TryParse

邀月 | 园豆:25475 (高人七级) | 2012-06-01 09:41

是这样用吗? 怎么有错啊?

支持(0) 反对(0) 小柑 | 园豆:6 (初学一级) | 2012-06-01 09:49

哦  谢谢了

支持(0) 反对(0) 小柑 | 园豆:6 (初学一级) | 2012-06-01 13:11
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册