将参数值从 String 转换到 Double 失败 bug参数值转换ExecSQL 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 附上代码: ArrayList sQLs = new ArrayList(); ArrayList sqlParams = new ArrayList(); DBClass class3 = new DBClass("ConnStr"); string[] userInfo = class2.GetUserInfo(); string str = "update FixFactory set SendDate=@SendDate,UnitName=@UnitName,UnitAddress=@UnitAddress,UnitDate=@UnitDate,Artificial=@Artificial,Principal=@Principal,TaxRegNo=@TaxRegNo,Manager=@Manager,PrincipalEmail=@PrincipalEmail,PrincipalMobile=@PrincipalMobile,PostCode=@PostCode,email=@Email,Summary=@Summary,Fax=@Fax,AcceptNo=@AcceptNo,Phone=@Phone,TaxArea=@TaxArea,Area=@Area,EconomyTypeName=@EconomyTypeName,TaxTypeName=@TaxTypeName,UnitType=@UnitType,WorkTypeName=@WorkTypeName,WorkRange=@WorkRange,Popedom=@Popedom,WorkType=@WorkType ,LicenceNo=@LicenceNo,ModifyDate=@ModifyDate,ModifyPersonName=@ModifyPersonName,ModifyOrgan=@ModifyOrgan,LawNo=@LawNo where FixFactory =@FixFactory"; SqlParameter[] parameterArray = new SqlParameter[] { new SqlParameter("@UnitName", SqlDbType.VarChar, 100), new SqlParameter("@FixFactory", SqlDbType.Float), new SqlParameter("@UnitType", SqlDbType.VarChar, 20), new SqlParameter("@WorkType", SqlDbType.Float), new SqlParameter("@WorkTypeName", SqlDbType.VarChar, 100), new SqlParameter("@WorkRange", SqlDbType.VarChar, 0xff), new SqlParameter("@Artificial", SqlDbType.VarChar, 20), new SqlParameter("@Principal", SqlDbType.VarChar, 20), new SqlParameter("@UnitAddress", SqlDbType.VarChar, 100), new SqlParameter("@PrincipalMobile", SqlDbType.VarChar, 20), new SqlParameter("@Phone", SqlDbType.VarChar, 50), new SqlParameter("@UnitDate", SqlDbType.DateTime), new SqlParameter("@PostCode", SqlDbType.VarChar, 10), new SqlParameter("@Fax", SqlDbType.VarChar, 50), new SqlParameter("@Email", SqlDbType.VarChar, 50), new SqlParameter("@Area", SqlDbType.VarChar, 50), new SqlParameter("@Manager", SqlDbType.VarChar, 50), new SqlParameter("@SendDate", SqlDbType.DateTime), new SqlParameter("@Summary", SqlDbType.VarChar, 0xff), new SqlParameter("@EconomyTypeName", SqlDbType.VarChar, 100), new SqlParameter("@TaxTypeName", SqlDbType.VarChar, 100), new SqlParameter("@TaxRegNo", SqlDbType.VarChar, 20), new SqlParameter("@TaxArea", SqlDbType.VarChar, 20), new SqlParameter("@Popedom", SqlDbType.VarChar, 50), new SqlParameter("@EconomyType", SqlDbType.Float), new SqlParameter("@PrincipalEmail", SqlDbType.VarChar, 80), new SqlParameter("@AcceptNo", SqlDbType.VarChar, 20), new SqlParameter("@LicenceNo", SqlDbType.VarChar, 20), new SqlParameter("@ModifyDate", SqlDbType.DateTime), new SqlParameter("@ModifyPersonName", SqlDbType.VarChar, 50), new SqlParameter("@ModifyOrgan", SqlDbType.Float), new SqlParameter("@LawNo", SqlDbType.VarChar, 20) }; string str2 = this.returnItemName(); parameterArray[0].Value = this.TextBox10.Text.Trim(); parameterArray[1].Value = this.ViewState["FixFactory"].ToString(); parameterArray[2].Value = this.DropDownList5.SelectedItem.Text.Trim(); parameterArray[3].Value = this.ViewState["WorkType"].ToString(); parameterArray[4].Value = ""; parameterArray[5].Value = ""; parameterArray[6].Value = this.TextBox11.Text.Trim(); parameterArray[7].Value = this.TextBox4.Text.Trim(); parameterArray[8].Value = this.TextBox8.Text.Trim(); parameterArray[9].Value = this.TextBox15.Text.Trim(); parameterArray[10].Value = this.TextBox26.Text.Trim(); parameterArray[11].Value = this.TextBox9.Text.Trim(); parameterArray[12].Value = this.TextBox14.Text.Trim(); parameterArray[13].Value = this.TextBox23.Text.Trim(); parameterArray[14].Value = this.TextBox7.Text.Trim(); parameterArray[15].Value = "青岛市"; parameterArray[0x10].Value = this.TextBox6.Text.Trim(); parameterArray[0x11].Value = this.TextBox1.Text.Trim(); parameterArray[0x12].Value = str2; parameterArray[0x13].Value = this.DropDownList6.SelectedItem.Text.Trim(); if (this.DropDownList9.SelectedValue.Trim() == "none") { parameterArray[20].Value = DBNull.Value; } else { parameterArray[20].Value = this.DropDownList9.SelectedItem.Text.Trim(); } parameterArray[0x15].Value = this.TextBox12.Text.Trim(); if (this.DropDownList7.SelectedValue.Trim() == "none") { parameterArray[0x16].Value = DBNull.Value; } else { parameterArray[0x16].Value = this.DropDownList7.SelectedItem.Text.Trim(); } parameterArray[0x17].Value = this.DropDownList2.SelectedItem.Text.Trim(); parameterArray[0x18].Value = this.DropDownList6.SelectedValue.Trim(); parameterArray[0x19].Value = this.TextBox13.Text.Trim(); parameterArray[0x1a].Value = this.TextBox25.Text.Trim(); parameterArray[0x1b].Value = this.TextBox27.Text.Trim(); parameterArray[0x1c].Value = DateTime.Now.ToString(); parameterArray[0x1d].Value = userInfo[0].ToString(); parameterArray[30].Value = userInfo[2].ToString(); parameterArray[0x1f].Value = class2.GetFacsNo(this.DropDownList2.SelectedValue, this.ViewState["FixFactory"].ToString()); sQLs.Add(str); sqlParams.Add(parameterArray); if (class3.ExecSQL(sQLs, sqlParams)) { this.CloseAll(); class2.alert(this.Page, "变更成功"); this.Button2.Enabled = true; } else { class2.alert(this.Page, "变更失败"); } 应该上面的数据有问题,应该转为double 检查下那些SqlDbType.Float的参数,其中有一个被赋了不能转换为浮点数字的字符串。 你贴错代码了,应该把 class3.ExecSQL 这个里面的 代码贴出来 ("@FixFactory", SqlDbType.Float),这里你写入的都是.ToString 入库的数据类型与数据字段类型要对应上,不然就出错了,可用convert来转换 在给参数赋值时,转换类型。比如: parameterArray[0] = double.Parse("0.1"); 你贴错代码了,应该把 class3.ExecSQL 这个里面的 代码贴出来 public bool ExecSQL(ArrayList SQLs, ArrayList sqlParams); public bool ExecSQL(string SQL, SqlParameter[] sqlParams); 你定义了一个double 类型的parameter,但你付的值是string 类型,你检查那个parameter 是double类型,并给其付值的时候用 double.parse() 没有double类型的参数,有的就是float型的参数。 parameterArray[1].Value=this.ViewState["FixFactory"].toString();======>parameterArray[1].Value = Convert.ToDouble(this.ViewState["FixFactory"]);改成这样吗? parameterArray[1].Value=this.ViewState["FixFactory"].toString();======>parameterArray[1].Value = Convert.ToDouble(this.ViewState["FixFactory"]);改成这样吗?是的,你试一下,都要对应上 parameterArray[1].Value=this.ViewState["FixFactory"].toString();======>parameterArray[1].Value = Convert.ToDouble(this.ViewState["FixFactory"]);改成这样吗?是的,你试一下,都要对应上还是不对,还是刚才的错误提示。 如果我没看错 那就是你的第11 17 28个参数都是datetime类型的 可是你赋值的时候却给的是控件的text属性那是string类型的默认 需要你强制转换 或者 更慎重的取值 强制转换成datetime吗?怎么弄?求指导! 你的textbox取出来的值 是不是一定会规范需不需要用正则建议你直接用时间控件取值否则需要校验的 强制转换的话 convert.toDateTime(textbox取出来的值)很简单 为什么其他的按钮也是一样复制,却没有这个问题呢?我没法修改这个程序,只能修改下bug,否则会被上头说的。 具体情况我无法知道 但是从你贴出来的代码来看 就是一般的数据转换问题 理由很简单 你上面的SqlParameter里面 索引10 16 27 这三个都是datetime类型的对不对而下面紧接着对他赋值的时候 你给的都是 控件.text。trim()这样解决的 很显然 没有对准数据类型具体问题具体分析 不行你就跟踪调试一下 看看到底数据是什么样的 首先确认数据库表的哪个字段是浮点型。然后在项目中定义DataModel的时候,把对应的字段定义成double;赋值的时候确认值是数字;确定sql语句的字段先后顺序sql语句不缺少字段; 我将text格式转换成了parameterArray[11].Value = Convert.ToDateTime(this.TextBox9.Text.Trim());这样的,但是还是不对。 是不是没有考虑你的TextBox是空的情况,看你代码貌似没有过滤空的情况 感觉这个不用上代码了,多半就是因为你创建的 SqlParameter 对象的参数值的类型和数据库定义的不一样,不吻合。 C#中有没有这样的控件,像 TabControl,但标签在左边(一行一个) 如何创建一个数据缓存区来优化cpu使用? 一个查询的问题 winform编程,怎么改变某个加载的网页里的checkbox的值 如何将中文标点符号替换成英文标点符号 [求助]请问这个应该如何实现,或者我该主要看些什么书,谢谢各位! 高手进来看! 我没有调wati()、sleep()和join()为什么线程状态还会被改为WaitSleepJoin? 有些问题请帮下忙吧! c#有没有好书???我感觉自己在烧钱! 如何动态实现增、删结构体中成员变量 这又是怎么个意思?又是catch里边,汗。
ArrayList sqlParams = new ArrayList();
DBClass class3 = new DBClass("ConnStr");
string[] userInfo = class2.GetUserInfo();
string str = "update FixFactory set SendDate=@SendDate,UnitName=@UnitName,UnitAddress=@UnitAddress,UnitDate=@UnitDate,Artificial=@Artificial,Principal=@Principal,TaxRegNo=@TaxRegNo,Manager=@Manager,PrincipalEmail=@PrincipalEmail,PrincipalMobile=@PrincipalMobile,PostCode=@PostCode,email=@Email,Summary=@Summary,Fax=@Fax,AcceptNo=@AcceptNo,Phone=@Phone,TaxArea=@TaxArea,Area=@Area,EconomyTypeName=@EconomyTypeName,TaxTypeName=@TaxTypeName,UnitType=@UnitType,WorkTypeName=@WorkTypeName,WorkRange=@WorkRange,Popedom=@Popedom,WorkType=@WorkType ,LicenceNo=@LicenceNo,ModifyDate=@ModifyDate,ModifyPersonName=@ModifyPersonName,ModifyOrgan=@ModifyOrgan,LawNo=@LawNo where FixFactory =@FixFactory";
SqlParameter[] parameterArray = new SqlParameter[] {
new SqlParameter("@UnitName", SqlDbType.VarChar, 100), new SqlParameter("@FixFactory", SqlDbType.Float), new SqlParameter("@UnitType", SqlDbType.VarChar, 20), new SqlParameter("@WorkType", SqlDbType.Float), new SqlParameter("@WorkTypeName", SqlDbType.VarChar, 100), new SqlParameter("@WorkRange", SqlDbType.VarChar, 0xff), new SqlParameter("@Artificial", SqlDbType.VarChar, 20), new SqlParameter("@Principal", SqlDbType.VarChar, 20), new SqlParameter("@UnitAddress", SqlDbType.VarChar, 100), new SqlParameter("@PrincipalMobile", SqlDbType.VarChar, 20), new SqlParameter("@Phone", SqlDbType.VarChar, 50), new SqlParameter("@UnitDate", SqlDbType.DateTime), new SqlParameter("@PostCode", SqlDbType.VarChar, 10), new SqlParameter("@Fax", SqlDbType.VarChar, 50), new SqlParameter("@Email", SqlDbType.VarChar, 50), new SqlParameter("@Area", SqlDbType.VarChar, 50),
new SqlParameter("@Manager", SqlDbType.VarChar, 50), new SqlParameter("@SendDate", SqlDbType.DateTime), new SqlParameter("@Summary", SqlDbType.VarChar, 0xff), new SqlParameter("@EconomyTypeName", SqlDbType.VarChar, 100), new SqlParameter("@TaxTypeName", SqlDbType.VarChar, 100), new SqlParameter("@TaxRegNo", SqlDbType.VarChar, 20), new SqlParameter("@TaxArea", SqlDbType.VarChar, 20), new SqlParameter("@Popedom", SqlDbType.VarChar, 50), new SqlParameter("@EconomyType", SqlDbType.Float), new SqlParameter("@PrincipalEmail", SqlDbType.VarChar, 80), new SqlParameter("@AcceptNo", SqlDbType.VarChar, 20), new SqlParameter("@LicenceNo", SqlDbType.VarChar, 20), new SqlParameter("@ModifyDate", SqlDbType.DateTime), new SqlParameter("@ModifyPersonName", SqlDbType.VarChar, 50), new SqlParameter("@ModifyOrgan", SqlDbType.Float), new SqlParameter("@LawNo", SqlDbType.VarChar, 20)
};
string str2 = this.returnItemName();
parameterArray[0].Value = this.TextBox10.Text.Trim();
parameterArray[1].Value = this.ViewState["FixFactory"].ToString();
parameterArray[2].Value = this.DropDownList5.SelectedItem.Text.Trim();
parameterArray[3].Value = this.ViewState["WorkType"].ToString();
parameterArray[4].Value = "";
parameterArray[5].Value = "";
parameterArray[6].Value = this.TextBox11.Text.Trim();
parameterArray[7].Value = this.TextBox4.Text.Trim();
parameterArray[8].Value = this.TextBox8.Text.Trim();
parameterArray[9].Value = this.TextBox15.Text.Trim();
parameterArray[10].Value = this.TextBox26.Text.Trim();
parameterArray[11].Value = this.TextBox9.Text.Trim();
parameterArray[12].Value = this.TextBox14.Text.Trim();
parameterArray[13].Value = this.TextBox23.Text.Trim();
parameterArray[14].Value = this.TextBox7.Text.Trim();
parameterArray[15].Value = "青岛市";
parameterArray[0x10].Value = this.TextBox6.Text.Trim();
parameterArray[0x11].Value = this.TextBox1.Text.Trim();
parameterArray[0x12].Value = str2;
parameterArray[0x13].Value = this.DropDownList6.SelectedItem.Text.Trim();
if (this.DropDownList9.SelectedValue.Trim() == "none")
{
parameterArray[20].Value = DBNull.Value;
}
else
{
parameterArray[20].Value = this.DropDownList9.SelectedItem.Text.Trim();
}
parameterArray[0x15].Value = this.TextBox12.Text.Trim();
if (this.DropDownList7.SelectedValue.Trim() == "none")
{
parameterArray[0x16].Value = DBNull.Value;
}
else
{
parameterArray[0x16].Value = this.DropDownList7.SelectedItem.Text.Trim();
}
parameterArray[0x17].Value = this.DropDownList2.SelectedItem.Text.Trim();
parameterArray[0x18].Value = this.DropDownList6.SelectedValue.Trim();
parameterArray[0x19].Value = this.TextBox13.Text.Trim();
parameterArray[0x1a].Value = this.TextBox25.Text.Trim();
parameterArray[0x1b].Value = this.TextBox27.Text.Trim();
parameterArray[0x1c].Value = DateTime.Now.ToString();
parameterArray[0x1d].Value = userInfo[0].ToString();
parameterArray[30].Value = userInfo[2].ToString();
parameterArray[0x1f].Value = class2.GetFacsNo(this.DropDownList2.SelectedValue, this.ViewState["FixFactory"].ToString());
sQLs.Add(str);
sqlParams.Add(parameterArray);
if (class3.ExecSQL(sQLs, sqlParams))
{
this.CloseAll();
class2.alert(this.Page, "变更成功");
this.Button2.Enabled = true;
}
else
{
class2.alert(this.Page, "变更失败");
}
比如: parameterArray[0] = double.Parse("0.1");
public bool ExecSQL(string SQL, SqlParameter[] sqlParams);
parameterArray[1].Value=this.ViewState["FixFactory"].toString();======>parameterArray[1].Value = Convert.ToDouble(this.ViewState["FixFactory"]);
改成这样吗?
parameterArray[1].Value=this.ViewState["FixFactory"].toString();======>parameterArray[1].Value = Convert.ToDouble(this.ViewState["FixFactory"]);
改成这样吗?
是的,你试一下,都要对应上
parameterArray[1].Value=this.ViewState["FixFactory"].toString();======>parameterArray[1].Value = Convert.ToDouble(this.ViewState["FixFactory"]);
改成这样吗?
是的,你试一下,都要对应上还是不对,还是刚才的错误提示。
那是string类型的默认 需要你强制转换 或者 更慎重的取值
需不需要用正则
建议你直接用时间控件取值
否则需要校验的 强制转换的话 convert.toDateTime(textbox取出来的值)
很简单
理由很简单 你上面的SqlParameter里面 索引10 16 27 这三个都是datetime类型的对不对
而下面紧接着对他赋值的时候 你给的都是 控件.text。trim()这样解决的 很显然 没有对准数据类型
具体问题具体分析 不行你就跟踪调试一下 看看到底数据是什么样的
首先确认数据库表的哪个字段是浮点型。
然后在项目中定义DataModel的时候,把对应的字段定义成double;
赋值的时候确认值是数字;
确定sql语句的字段先后顺序
sql语句不缺少字段;
我将text格式转换成了parameterArray[11].Value = Convert.ToDateTime(this.TextBox9.Text.Trim());
这样的,但是还是不对。